#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#incldue <string.h>
char str[80];
char terms[]="'!;:,.?- ";
char res=NULL;
int word_count;
int main()
{
clrscr();
puts("Введите строку:n\");
scanf("%s", str);
res=strtok(str, terms);
while(res!=NULL)
{
word_count++;
res=strtok(NULL, terms);
}
printf("Слов в предложении %i штук.", word_count);
getch();
return 0;
}
Работа со строками в си
Допустим, у меня есть код:
Код:
По идее и согласно моему здравому смыслу если ввести строку, состоящую из нескольких слов, разделенных пробелами либо другими символами, из которых состоит строка terms, то в результате работы программы будет выведено количество слов в предложении, однако всегда она говорит, что слов в предложении одна штука! Помогите пожалуйста разобраться, помогите исправить так, чтобы считало количество слов в предложении! Очень надеюсь на вашу помощь! Заранее благодарен!
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
char str[80] = "In this row,some words";
char terms[]="'!;:,.?- ";
char *res=NULL;
int word_count;
int main()
{
res=strtok(str, terms);
while(res!=NULL)
{
word_count++;
res=strtok(NULL, terms);
}
printf("There are %d words!", word_count);
getch();
return 0;
#include <stdlib.h>
#include <conio.h>
#include <string.h>
char str[80] = "In this row,some words";
char terms[]="'!;:,.?- ";
char *res=NULL;
int word_count;
int main()
{
res=strtok(str, terms);
while(res!=NULL)
{
word_count++;
res=strtok(NULL, terms);
}
printf("There are %d words!", word_count);
getch();
return 0;
Для простоты отладки я сделал заданную зараннее строку.
Вобщем ошибка была только в обьявлении переменной res. Она поочерёдно принимает значения каждого слова, поэтому инициализация должна выглядеть как *res. Вот и фсё.
Код:
char str[80] = "In this row,some words";
то всё замечательно работает и считает слова, но если вводить строку с клавы
Код:
char str[80] = "In this row,some words";
то результат опять то т же самый: одно слово в предложении и всё тут! Как быть?
[COLOR="Red"]Маты ни в каком виде не использовать,следующий раз отправлю отдыхать[/COLOR]. модератор.
Код:
gets(str);
Спасибо огромное!!!
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
char str[80];
char terms[]="'!;:,.?- ";
char* res;
char* item;
char s[80][80];
char sort_arr[80][80];
int word_count;
int i, j;
int main()
{
clrscr();
puts("Ввкдите строку:\n");
fgets(str, sizeof(str), stdin);
puts("Исходные слова:\n");
res=strtok(str, terms);
while(res!=NULL)
{
strcpy(sort_arr[word_count], res);
printf("\n%i:\t%s", word_count+1, sort_arr[word_count]);
word_count++;
res=strtok(NULL, terms);
}
printf("\n\nСлов в предложении %i штук\n", word_count);
///////////////////////////////////////////////////////
for(i=1; i<word_count; i++)
{
strcpy(item, sort_arr);
j = i;
while(strcmp(item, sort_arr[j-1])<0)
{
strcpy(sort_arr[j], sort_arr[j-1]);
j--;
}
strcpy(sort_arr[j], item);
}
puts("\nОтсортированные слова:");
for(i=0; i<word_count; i++)
{
printf("\n%i:\t%s", i+1, sort_arr);
}
getch();
return 0;
}
#include <stdlib.h>
#include <conio.h>
#include <string.h>
char str[80];
char terms[]="'!;:,.?- ";
char* res;
char* item;
char s[80][80];
char sort_arr[80][80];
int word_count;
int i, j;
int main()
{
clrscr();
puts("Ввкдите строку:\n");
fgets(str, sizeof(str), stdin);
puts("Исходные слова:\n");
res=strtok(str, terms);
while(res!=NULL)
{
strcpy(sort_arr[word_count], res);
printf("\n%i:\t%s", word_count+1, sort_arr[word_count]);
word_count++;
res=strtok(NULL, terms);
}
printf("\n\nСлов в предложении %i штук\n", word_count);
///////////////////////////////////////////////////////
for(i=1; i<word_count; i++)
{
strcpy(item, sort_arr);
j = i;
while(strcmp(item, sort_arr[j-1])<0)
{
strcpy(sort_arr[j], sort_arr[j-1]);
j--;
}
strcpy(sort_arr[j], item);
}
puts("\nОтсортированные слова:");
for(i=0; i<word_count; i++)
{
printf("\n%i:\t%s", i+1, sort_arr);
}
getch();
return 0;
}
Так вот теперь мне нужно переписать этот код в процедурном стиле, чтобы каждое отдельное действие было записано в виде процедуры (ввод предложения, разбитие его на слова, сортировка слов, вывод результата). Пробовал переписывать сам - прога компилится и работает, но совершенно неправиль и не так, как до моих преобразований кода. Помогите пожалуйста с этим, очень вас прошу!