当前位置: 代码迷 >> 综合 >> 逆置一组字符串,输入”sing dance rap basketball“,逆置后得到“basketball rap dance sing”
  详细解决方案

逆置一组字符串,输入”sing dance rap basketball“,逆置后得到“basketball rap dance sing”

热度:48   发布时间:2023-12-12 08:20:28.0

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