Pri*_*nka 2 c string algorithm
我编写了i程序,它将翻转一个句子并将其打印出来.
在这段代码中,我得到的所有单词都是正确的,除了最后一个.即在反转代码中的句子之后,"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);
}
Run Code Online (Sandbox Code Playgroud)
字符串中的最后一个单词不是以空格字符结尾.因此,在for循环之后你需要这样的东西(未经测试):
if (wl > 0) {
reverse(s + start, wl);
}
Run Code Online (Sandbox Code Playgroud)
扭转最后一个字也是如此.
补充:完整代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
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