我正在尝试编写程序,该程序接受文本并将其分成句子。
输入:
Hi, my name is John.
输出:
Hi,
my
name
is
John.
代码
int main ()
{
int str[200];
int i = 0;
puts ("Enter text. Do not forget to put dot at the end.");
do {
str[i] = getchar();
i++;
} while (str[i-1] != '.');
printf("\n");
int k, lenght = 0; //lenght -- the lenght of single word
for (i=0; str[i] != '.'; i++) {
if (str[i] == ' ' || str[i] == '.') {
printf ("\n");
k = i - lenght;
do {
putchar (str[k]);
k++;
} while (str[k] != ' ');
lenght = 0;
}
lenght++;
}
printf ("\n stop");
return 0;
}
如果您尝试运行或者可以看到,则存在错误。它不输出最后一个单词。
我试图把这个循环放在那里:
do {
if (str[i] == ' ') {
printf("\n");
k=i-lenght;
do {
putchar(str[k]);
k++;
}while(str[k] != ' ');
lenght=0;
}
lenght++;
i++;
}while(str[i+1] != '.');
但它是相同的循环...我也尝试过制作函数:
void word (char *c,int index, int lenght ) {
printf ("\n");
int i = index - lenght;
do {
putchar (c[i]);
i++;
} while (c[i] != ' ');
return;
}
我调用它而不是 do-while 循环(在代码的“if 部分”):
for (i=0; str[i] != '.'; i++) {
if (str[i] == ' ' || str[i] == '.') {
word(str, i, lenght);
lenght = 0;
}
lenght++;
}
令我惊讶的是,该函数仅“输出”句子中的第一个单词。如果第一个单词是“John”,则输出“John”“ohn”“hn”。
所以这不仅仅是一个问题......
如何重新制作/修复循环/函数以输出我想要的内容 - 句子中的所有单词?
为什么它不起作用?我知道答案 - 因为你的循环是以字符“”结束的,而不是以“.”结束,但是当我尝试更改它时,它在点之后再输出一个随机字符。
请不要因为代码而责怪我,我只是想学习一些东西的初学者。我知道它不是杰作,但我可以并且会在完成之前将其缩短。
最佳答案
它不打印最后一个单词的原因是,一旦它读取并找到“.”,for 循环就会终止,因此它不会处理和输出该单词。
您可以更改 for 循环条件以查找终止“\0”,这应该可以修复它。
关于c - 如何使用数组将句子分成单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813126/