逆置一组字符串,例如输入”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);
}