2015-09-27 220 views
-2

我正在嘗試編寫程序,它將文本分隔爲句子。
輸入:如何在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週期/函數輸出我想要什麼 - 所有的句子中的單詞?

爲什麼它不起作用?嗯,我知道答案 - 你的週期是建立在字符''結尾,但不是'。',但是當我試圖改變它時,它會在點之後輸出一個更多的隨機字符。

只是請不要責怪我的代碼,我只是試圖學習一些東西。我知道它不是傑作,在完成之前我可以將它縮短。

+1

請正確格式化您的代碼。 –

+1

看到這個https://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c –

+0

是否有理由讓你使用'。'而不是'\ 0'作爲短語結束符?如果你沒有'。',這將停止。到底。只是一個提示。 –

回答

0

不打印最後一個單詞的原因是,只要它讀取並找到'。',for循環終止,因此它不會處理並輸出該單詞。

您可以更改for循環條件來查找終止'\ 0',而應該修復它。

+0

將支票從'。'更改。到'\ 0'應該修復它。但如果你仔細想想,那還是很難看的。但我同意考慮代碼這可能是解決它的最簡單方法。 –

+0

我知道它應該但它不... – Tehryn

+0

它只在第一個單詞中打印fritst字母。 – Tehryn

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; 
} 
+0

請解釋你的答案 –