我正在尝试编写程序,它将文本分成句子 输入:
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"它输出"约翰" " OHN" " HN"
所以不只有一个问题......
如何重新制作/修复周期/功能以输出我想要的内容 - 句子中的所有单词?
为什么它不起作用?我知道答案 - beacouse你的周期是建立在角色上的结束' ',但不是'。',但当我尝试更改它时,它会在点后输出一个随机字符。
请不要责怪我的代码,我只是想尝试学习一些东西。我知道它不是杰作而且我可以在完成之前缩短它。
答案 0 :(得分:1)
它没有打印最后一个单词的原因是,只要它读取并找到'。',for循环终止,所以它不会处理输出那个词。
您可以更改for循环条件以查找终止' \ 0'相反,那应该解决它。
答案 1 :(得分:0)
#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;
}