|
|
Регистрация | << Правила форума >> | 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; jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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. |