我正在尝试编写程序,它将文本分成句子。
输入:
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 循环条件以查找终止“ ”,这应该可以修复它。
#include<stdio.h>
int main () {
char str[200];
int i = 0;
puts ("Enter text:");
gets(str);
int k, length = 0;
printf("So the words are:\n");
while(str[i]!='\0') {
if (str[i] == ' ') {
k = i - length;
do {
putchar (str[k]);
k++;
} while (str[k] != ' ');
printf ("\n");
length = (-1);
}
else if (str[i+1] == '\0') {
k = i - length;
do {
putchar (str[k]);
k++;
} while (str[k] != '\0');
length = 0;
}
length++;
i++;
}
return 0;
}