繁体   English   中英

倒句时最后一个字不倒

[英]Last word not reversed while reversing a sentence

我已经写了我的程序,它可以将一个句子反转并打印出来。

在这段代码中,除了最后一个单词,我得到的所有单词都是正确的。 也就是说,在将代码中的句子反转之后,“ 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);
}

字符串中的最后一个单词不以空格字符结尾。 因此在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM