2014-01-25 27 views
2

我已经写过了我将翻转一个句子并打印出来的程序。正确翻译一个句子时最后一个单词不被翻转

在这段代码中,除了最后一个,我得到了所有正确的单词。即在代码中翻转句子之后,“hiii”仍然是“iiih”,其余的输出是正确的。

void reverse(char * s, int len){ 
    int counter = 0; 
    int end = len - 1; 
    char temp; 

    for (counter = 0; counter < len/2; counter++, end--) { 
     temp = s[counter]; 
     s[counter] = s[end]; 
     s[end] = temp; 
    } 
} 

int main(void){ 
    char s[] = "hiii all i want to reverse this sentence so please help me fast"; 
    int c = 0; 
    int len = strlen(s); 
    int wl = 0; 
    int start = 0; 
    printf("\n s = %s", s); 
    reverse(s, len); 

    for (c = 0; c < len; c++){ 
     if (!wl) 
      start = c; 

     if (s[c] != ' '){ 
      wl++; 
     } 
     else { 
      reverse(s + start, wl); 
      wl = 0; 
     } 
    } 
    printf("\nnow s = %s", s); 
} 
+2

第一个正确缩进。学习[缩进C程序](http://www.cs.arizona.edu/~mccann/indent_c.html)。 –

+0

Priyanka很快就检查了这个[help-center](http://stackoverflow.com/posts/21348646/revisions),并学习了[如何提出问题](http://meta.stackexchange.com/questions/18584/如何问一个聪明的问题) –

回答

6

字符串中的最后一个单词不是以空格字符结尾的。 因此,你需要像这样 for循环(未经测试)后:

if (wl > 0) { 
    reverse(s + start, wl); 
} 

逆转的最后一个字为好。

补充:全码:

int main(void) { 
    char s[] = "hiii all i want to reverse this sentence so please help me fast"; 
    int c = 0; 
    int len = strlen(s); 
    int wl = 0; 
    int start = 0; 
    printf("\n s = %s", s); 
    reverse(s, len); 

    for (c = 0; c < len; c++) { 
     if (!wl) { 
      start = c; 
     } 

     if (s[c] != ' ') { 
      wl++; 
     } else { 
      reverse(s + start, wl); 
      wl = 0; 
     } 

    } 

    if (wl > 0) { 
     reverse(s + start, wl); 
    } 

    printf("\nnow s = %s", s); 

} 

输出:

 
    s = hiii all i want to reverse this sentence so please help me fast 
now s = fast me help please so sentence this reverse to want i all hiii 
+0

我得到了你说的,但我应该把上面的行放在我的代码中? – Priyanka

+0

@Priyanka:在for循环之后,就在'printf(“\ nnow s =%s”,s)之前;' –

+0

我认为你的答案有问题,请参阅我的答案。 – EOF