我正在嘗試編寫程序,它將文本分隔爲句子。
輸入:如何在C語言中使用數組將句子分解爲單詞
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;
}
我撥通它,而不是做,而週期(在代碼中的「如果一節」):
for (i=0; str[i] != '.'; i++) {
if (str[i] == ' ' || str[i] == '.') {
word(str, i, lenght);
lenght = 0;
}
lenght++;
}
什麼surpriced我的是,該功能被「輸出」只有科幻rs在句子中的詞。如果第一個單詞是「John」,它輸出「John」「ohn」「hn」。
所以有不只是一個問題...
如何翻拍/ repaire週期/函數輸出我想要什麼 - 所有的句子中的單詞?
爲什麼它不起作用?嗯,我知道答案 - 你的週期是建立在字符''結尾,但不是'。',但是當我試圖改變它時,它會在點之後輸出一個更多的隨機字符。
只是請不要責怪我的代碼,我只是試圖學習一些東西。我知道它不是傑作,在完成之前我可以將它縮短。
請正確格式化您的代碼。 –
看到這個https://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c –
是否有理由讓你使用'。'而不是'\ 0'作爲短語結束符?如果你沒有'。',這將停止。到底。只是一個提示。 –