Напишите пожалуйста что делает каждая строчка программы. Программа считает количество введенных слов с клавиатуры. Словами считается набор любых символов разделенные пробелом.
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int sp = 0;
char str[100];
for (int i = 0; i <= 99; i++) str[i] = '`';
fgets(str, 99, stdin);
int lstr = sizeof str / sizeof str[0];
for (int i = 0; i <= lstr; i++)
{
if (isspace(str[i])) sp++;
}
cout << sp << endl;
cout <<"\n";
system("pause");
return 0;
}
Другие языки программирования и технологии
Помогите объяснить программу C++
Программа делает глупости, не имеющие никакого отношения к кол-ву слов:
Во первых, совершенно бессмысленный цикл for (int i = 0; i <= 99; i++) str[i] = '`';, заполняющий 99 из 100 элементов массива пробелами.
Во вторых, совершенно бессмысленное выражение int lstr = sizeof str / sizeof str[0];, ВСЕГДА равное 100.
В третьих, цикл не по введённой строке, а по всему массиву str.
В четвёртых, считается не кол-во слов, а кол-во пробельных символов (а не только пробелов) в этом массиве. Напомню, что в начале ВЕСЬ массив, кроме последнего его символа, заполняется пробелами.
char str[200]; // буфер строки
int sp = 0; // счётчик слов
fgets(str, 199, stdin); // читаем строку
for (int i = 0; str[i] != '\0'; ++i) { // цикл по символам строки
// если текущий символ - не пробел, а следующий символ - пробел или конец строки
if (str[i] != ' ' && (str[i + 1] == ' ' || str[i + 1] == '\0')) { ++sp; }
}
cout << sp;
Во первых, совершенно бессмысленный цикл for (int i = 0; i <= 99; i++) str[i] = '`';, заполняющий 99 из 100 элементов массива пробелами.
Во вторых, совершенно бессмысленное выражение int lstr = sizeof str / sizeof str[0];, ВСЕГДА равное 100.
В третьих, цикл не по введённой строке, а по всему массиву str.
В четвёртых, считается не кол-во слов, а кол-во пробельных символов (а не только пробелов) в этом массиве. Напомню, что в начале ВЕСЬ массив, кроме последнего его символа, заполняется пробелами.
char str[200]; // буфер строки
int sp = 0; // счётчик слов
fgets(str, 199, stdin); // читаем строку
for (int i = 0; str[i] != '\0'; ++i) { // цикл по символам строки
// если текущий символ - не пробел, а следующий символ - пробел или конец строки
if (str[i] != ' ' && (str[i + 1] == ' ' || str[i + 1] == '\0')) { ++sp; }
}
cout << sp;
Виторган Лабеан
Вы не могли бы тогда предложить свой вариант программы пожалуйста?
Программу переписывать. Адище. + она считает кол-во пробелов +табуляции и т. д. в _"лучшем"_ случае, что не соотв. условию => объяснять бесполезно.
ф-я isspace
_http://cppstudio.com/post/990/
Отдельный привет за int lstr = sizeof str / sizeof str[0];
strlen запретили пользоваться или просто идти по строке, пока не найден '\0'??
P.S: Н-р при вводе " test" (пробел test) будет 2. в _лучшем_ случае =)
ф-я isspace
_http://cppstudio.com/post/990/
Отдельный привет за int lstr = sizeof str / sizeof str[0];
strlen запретили пользоваться или просто идти по строке, пока не найден '\0'??
P.S: Н-р при вводе " test" (пробел test) будет 2. в _лучшем_ случае =)
Виторган Лабеан
Вы бы могли предложить свой вариант программы пожалуйста?
Похожие вопросы
- Пожалуйста, помогите с программой C++
- Помогите исправить ошибку в программе (c++).
- Помогите с программой Dev C++
- Помогите написать программу по C++
- Помогите написать программу на C/C++
- помогите написать программу на c++
- срочно помогите написать программу на ассемблере вычисляющую R. R=x2+y2, где x=a+b-c, y=b*c-a. a,b,c вводятся с клавы
- Помогите написать программу в C++
- Помогите написать программу в C# пожалуйста!
- помогите сделать в программе c++