![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Мне нужно решить задачу, в которой нужно подсчитать количество слов в предложении. Я решил это сделать при помощи функции strtok. Я не понимаю, почему программа не работает корректно?
Код:
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main() {
char s[250], *tokenPtr;
int pr = 0;
scanf("%s", s);
tokenPtr = strtok(s, " ");
while(tokenPtr!=NULL) {
printf("%s\n", tokenPtr);
tokenPtr = strtok(NULL, " ");
pr++;
}
printf("%d\n", pr);
getch();
return 0;
} |
|
#2
|
||||
|
||||
|
Ну вопервых tokenPtr = strtok(NULL, " "); ничего вам не даст. Икать пробел надо в строке, так как вы это делали выше tokenPtr = strtok(s, " ");
Во вторых, вы ничего не делаете со строкой в цикле и будет цикл у вас поэтому крутится до бесконечности. |
|
#3
|
|||
|
|||
|
Вместо scanf("%s", s); используйте
Код:
fgets(s, 250, stdin); Цитата:
|
|
#4
|
|||
|
|||
|
То есть как это в строке? Вот так
Код:
while(strtok(s, " ") != NULL |
|
#5
|
|||
|
|||
|
Ничего не делайте, просто замените
Код:
scanf("%s", s);Код:
fgets(s, 250, stdin); |
|
#6
|
||||
|
||||
|
Код:
int len = strlen(s);
int count = 0;
for (int i = 0; i < len; ++i)
if (s[i] == ' ')
{
++count;
do
++i;
while (i < len && s[i] == ' ');
}
if (s[len-1] != ' ')
++count;Последний раз редактировалось Bargest, 25.06.2013 в 14:31. |
|
#7
|
|||
|
|||
|
Ваша программа выполняется не для всех значений.
|
|
#8
|
||||
|
||||
|
Пардон если слишком толсто, зато работает, тестил, вроде ошибок нет.
Код:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 255
/*
Подсчет слов. Словом считается минимум одна буква,
которая окружена с обеих сторон как минимум одним
пробелом
*/
int Words_Count(char *buff)
{
int word = 0;
int k = 0;
// вычисляем длинну строки
int len = strlen(buff);
// последний символ не пробел?
if (!isspace(buff[len]))
// нет, вносим пробел
buff[len] = ' ';
// ввод начался с пробелов?
if (isspace(buff[0]))
{
// считаем количество пробелов
while (isspace(buff[k]))
k++;
}
// счет от первого места, где закончились пробелы
for (int i = k; i < SIZE; i++)
{
// встретили пробел?
if (isspace(buff[i]))
// надо же, еще один!
if (isspace(buff[i+1]))
// ищем не пробелы
continue;
// нашли не пробел, значит слово
else word++;
}
return word;
}
int main ()
{
// Выделяем память и заполняем нулями
char *buff = (char*)calloc(SIZE, sizeof(char));
// считываем строку
gets_s(buff,SIZE);
printf("So, we have the %d words", Words_Count(buff));
getchar();
return 0;
}Последний раз редактировалось orion_asm, 28.06.2013 в 22:36. |