逆置一组字符串,例如输入”sing dance rap basketball“
逆置后得到这么一个字符串
”basketball rap dance sing"
思路如下:
首先将整组字符串逆置
llabteksab par ecnad gnig
再将其中每个一个单词逆置
也可以先将每一个单词逆置,再逆置整租字符串
具体代码如下
void Reverse(char* start, char* end){
//传始末两指针,将字符串逆置char tmp;while (start < end){tmp = *start;*start = *end;*end = tmp;start++;end--;}
}
void reversestring(char*src){int i;char* start = src;char* end;for (i = 0; src[i]; i++){//遍历数组if (src[i] == ' '){end = src + i - 1;//i为空格的位置,end为空格前一位Reverse(start, end);start = src + i + 1;}}end = src + i - 1;Reverse(start, end);Reverse(src, end);
}
int main(){char src[] = "sing dance rap basketball";reversestring(src);puts(src);system("pause");return 0;
}
这里需要注意的是,for循环中,遍历了整个数组,此循环中只有sing dance rap
三个单词完成了逆置,因为其后一位都是‘ ’
而 "sing dance rap basketball"是以\0结尾的,即basketball未完成逆置
我们需要再循环外遍将其逆置一下
结果如下
还可以用库函数来解决这道问题
代码如下:
void reverseStringS(char * src)
{char * tmp;char dest[100] = { 0 };while (tmp = strrchr(src, ' ')){strcat(dest, tmp + 1);strcat(dest, " ");*tmp = 0;}strcat(dest, src);strcpy(src, dest);
}