Модераторы: 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
Навіщо так складно

, якщо можна простіше

:
Код: Выделить всё
#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;
}