Консультация № 192638
02.03.2018, 14:25
0.00 руб.
0 3 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Исправить подсчет слов, считает пустые строки и если строка начинается с пробела то тоже неправильно считает
Код:
#include <iostream>
#include <Windows.h>
using namespace std;


int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char s[5][80];
double count = 0, z = 0;
double size = 0;
double average = 0;
cout << "Введите 5 строк до 80 символов на каждую: " << endl;
for (int i = 0; i < 5; i++)
{
cin.getline(s[i], 80);
}

for (int i = 0; i < 5; i++) {


for (int j = 0; j < 80; j++) {

if (s[i][j] != ' ' && (s[i][j + 1] == ' ' || s[i][j + 1] == '\0')) // Считаем кол-во слов
count++;



}

}
for (int i = 0; i < 5; i++) {
z = strlen(s[i]); // Вызов стандартной функции длины строки
for (int j = 0; j < z; j++) // Пробег по символам строки
{
if (s[i][j] != '\0' && s[i][j] != ' ' && s[i][j] != '.' && s[i][j] != ':' && s[i][j] != ',' && s[i][j] != '?' && s[i][j] != '!') // Считаем кол-во символов
size += 1;

}
}


cout << "Кол-во слов в тексте: " << count << endl;
cout << "Кол-во символов: " <<size << endl;
average = size / count;
cout << "Средняя длина слов: " << average << endl ;
system("pause");
return 0;
}


Обсуждение

давно
Посетитель
7438
7205
02.03.2018, 14:50
общий
Адресаты:
И зачем Вы сформировали столько одинаковых консультаций?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401835
9
02.03.2018, 15:00
общий
Извините, не специально, просто на отправить несколько раз нажимал и ничего не происходило
давно
Посетитель
7438
7205
02.03.2018, 15:11
общий
это ответ
Здравствуйте, andrey.lushov!
Я бы сделал так:
[code h=200]#include <iostream>
#include <Windows.h>
using namespace std;

bool isSep(char ch)
{
switch(ch)
{
case ' ':
case 0x09:
case ',':
case '.':
case ':':
case ';':
case '!':
case '?':
return true;
default:
return false;
}
}

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char s[5][81];
double count = 0;
double size = 0;
double average = 0;
int i, j;
bool fWord;

cout << "Введите 5 строк до 80 символов на каждую: " << endl;

for (i = 0; i < 5; i++)
cin.getline(s[i], 81);

for (i = 0; i < 5; i++)
{
fWord = false;
for (j = 0; s[i][j]; j++)
{
if (isSep(s[i][j]))
fWord = false;
else
{
if (!fWord)
{
fWord = true;
count++;
}
}
}
}

for (i = 0; i < 5; i++)
{
for (j = 0; s[i][j]; j++)
size += !isSep(s[i][j]);
}

cout << "Кол-во слов в тексте: " << count << endl;
cout << "Кол-во символов: " <<size << endl;
average = size / count;
cout << "Средняя длина слов: " << average << endl ;
system("pause");
return 0;
}[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа