Reputation: 317
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. i.e 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);
}
Upvotes: 2
Views: 157
Reputation: 539745
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
Upvotes: 5