简体   繁体   中英

Last word not reversed while reversing a sentence

I have written i program which will reverse a sentence and print it.

In this code i get all the words correct except the last one. ie after reversing the sentence in the code, "hiii" still remains "iiih" , rest of the output is proper.

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);
}

The last word in the string is not terminated by a space character. Therefore you need something like this after the for loop (untested):

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

to reverse the last word as well.

Added: Full code:

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);

}

Output:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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