Подсчет слов и пробелов в текстовом файле

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
fyzyz
Сообщения: 1
Зарегистрирован: 18 окт 2010, 19:20

Здание подсчитать слова и пробелы в текстовом файле.

Код: Выделить всё

{
		FILE *file; 
	char *fname = "ReadMe.txt";
	char result_string[100]= "none"; 
	int word=1;
	int space=1;
	int w=0;
	int i=0;

 
	file = fopen(fname,"r");
	while(fgets(result_string,sizeof(result_string),file))
	{
		cout<<result_string<<endl;
		for (int k=0; k<strlen(result_string); k++)
		{
		if (result_string[k]==' '&& w!=1)
	     {
            word=word+1;
			w=1;
		  }
		 if(result_string[k]!=' ')
		 {
		  w=0;

		}
		 if(result_string[k]==' ')
		 {
			 space=space+1;
		 }
		 
		}
		if(result_string[strlen(result_string)-1] == '\n')
		{
			result_string[strlen(result_string)-1]='\0';
		};
	}
 cout<<"Kolichestvo slov:"<<word<<endl;
 cout<<"Kolichestvo probelov:"<<space<<endl;
 
	fclose(file);

	return 0;
}
Пробелы считает нормально, а вот со словами беда, не знаю как исправить. Посоветуйте что-нибудь.
azrael
Сообщения: 89
Зарегистрирован: 31 май 2009, 15:30
Контактная информация:

Если первый и последний символ не является пробелом, то число слов = число пробелов + 1 :)
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

azrael писал(а):Если первый и последний символ не является пробелом, то число слов = число пробелов + 1 :)

Ну это смотря что считать пробелами, а что словами. как минимум никто не запрещал ставить несколько пробелов подряд :)
budulaj88
Сообщения: 13
Зарегистрирован: 20 окт 2010, 17:28

Навіщо так складно :confused: , якщо можна простіше :D :

Код: Выделить всё

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main()
{
    ifstream fin("main.txt", ios_base::binary|ios_base::in);
    int lich_slova = 0;
    int lich_probily = 0;
    char sym = 0;
    unsigned char *text = new unsigned char[1000];
    int mitka = 0;
    while(!fin.eof())
    {
        fin.read((char*)&sym,sizeof sym);
        if ((int)sym==32)
        {
            lich_probily++;
            mitka=0;
        }
        else if((int)sym!=32)
        {
            if(mitka==0)
            {
                lich_slova++;
                mitka=1;
            }
        }
    }

    cout <<"probil = "<<setw(7)<<lich_probily<<endl;
    cout <<"slovo = "<<setw(8)<<lich_slova<<endl;
    fin.close();
    fin.clear();
    delete []text;
    return 0;
}
budulaj88
Сообщения: 13
Зарегистрирован: 20 окт 2010, 17:28

А якщо враховувати, що один символ неє словом тоді так:

Код: Выделить всё

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main()
{
    ifstream fin("main.txt", ios_base::binary|ios_base::in);
    int lich_slova = 0;
    int lich_probily = 0;
    char sym = 0;
    unsigned char *text = new unsigned char[1000];
    int mitka = 0;
    while(!fin.eof())
    {
        fin.read((char*)&sym,sizeof sym);
        if ((int)sym==32)
        {
            lich_probily++;
            mitka=0;
        }
        else if((int)sym!=32)
        {
            if(mitka==0) 
                mitka+=1;
            else if(mitka==1)
            {
                lich_slova++;
                mitka=2;
            }
        }
    }
    cout <<"probil = "<<setw(7)<<lich_probily<<endl;
    cout <<"slovo = "<<setw(8)<<lich_slova<<endl;
    fin.close();
    fin.clear();
    delete []text;
    return 0;
}
Ответить