目录
前言
如何实现
代码实现
1.设立一个数组存放输入的字符串
2.将输入的字符串整体逆序
2.1 计算字符串长度
2.2 使用函数来实现倒置
2.3 实现函数reverse
3.将其中每个单词再进行逆序
3.1 整个语句如何结束循环
3.2 每个单词的结束位置
3.3 内部实现
3.4 判断语句结束,从而停止逆序
代码汇总
结语
前言 如何将一串含有多个单词的字符串逆序,并且每个单词及标点符号不逆序输出呢,下面我们一起来实现一下吧。
示例:
输入下列字符:
I like beijing.输出结果:
beijing. like I如何实现 实现的思路如下:
1.设立一个数组存放输入的字符串
2.将输入的字符串整体逆序
.gnijieb ekil I3.将其中每个单词再进行逆序
beijing. like I代码实现 1.设立一个数组存放输入的字符串
#include int main()
{
char arr[100] = { 0 };
gets(arr);
//注意没有使用scanf,因为scanf遇到空格就会停止接收输入的内容printf("%s\n",arr);
return 0;
}
2.将输入的字符串整体逆序 需要整体逆序字符串,就需要一个函数来实现,且需要给函数传递两个参数:第一个元素和最后一个元素,而求这两个元素需要首元素地址并计算一下数组内字符串的长度。
2.1 计算字符串长度
int len = strlen(arr);
2.2 使用函数来实现倒置
reverse(arr,arr+len-1);
2.3 实现函数reverse
void reverse(char* left,char* right)
{
while(left < right)//只有当左边的地址小于右边的地址时,才交换,中间的不需要交换
{
char tmp = 0;
//定义并初始化一个中间值
tmp = *left;
//开始交换
*left = *right;
*right = tmp;
left++;
right--;
}
}
此时整体代码如下
void reverse(char* left, char* right)
{
while (left
我们输入 I like beijing. 试试

文章图片
3.将其中每个单词再进行逆序 这时我们需要将其中每个单词再进行逆序,这样才能达到我们需要的效果。
这其中需要注意几点:
1.整个语句如何结束循环
2.每个单词的起始位置和结束位置
3.内部如何实现
4.怎样才能判断语句结束,从而停止逆序
3.1 整个语句如何结束循环
我们可以定义一个起始位置,当这个位置的地址等于 '\0' 时,那么就相当于语句结束了。
char* start = arr;
while(*start != '\0')
{}
3.2 每个单词的结束位置
当遇到空格或者 '\0' 时,某一单词就结束了
我们可以首元素的地址赋给一个新的指针,只要这个指针指向的不是空格且不是 '\0' ,我们就让他往后挪一位,这样一个单词就找到了
char* start = arr;
while(*start != '\0')
{
char* end = start;
while(*end != ' ' && *end != '\0')
{
end++;
}
}
3.3 内部实现
此时只要利用之前定义的函数来交换这个单词的每个字符,就可以完成一个单词的逆序
char* start = arr;
while(*start != '\0')
{
char* end = start;
while(*end != ' ' && *end != '\0')//一个单词的结束位置
{
end++;
}
reverse(start, end - 1);
}
3.4 判断语句结束,从而停止逆序
接下来我们需要进行下一个单词的逆序,此时首元素的地址就需要之前的尾元素的地址再加1,那么如果整个语句结束了,此时还需要判断是否需要进行下一次逆序。
char* start = arr;
while(*start != '\0')
{
char* end = start;
while(*end != ' ' && *end != '\0')//一个单词的结束位置
{
end++;
}
reverse(start, end - 1);
if(*end != '\0')//还有下一个单词
start = end + 1;
else//末尾为'\0' 语句结束
start = end;
//跳出循环
}
代码汇总
#include
#include //输入 I like beijing.
//输出 beijing. like I
void reverse(char* left, char* right)
{
while (left
结语 此时我们的程序就完成啦,让我们来运行一下试试吧!
输入I like beijing.

文章图片
大功告成!
此时我们可以思考一下这种方法的衍生版本,
比如在某种原因下,我们将一串字符每个单词的顺序弄颠倒了,我们需要重新进行排序,此时如何不变动标点符号来逆序?
如何替换特定单词的顺序,比如想把 I beijing like.变为正常的 I like beijing.又需要进行哪些操作呢?
如果大家有更好的方法或者想法,欢迎大家在评论区留言讨论哦~
【C语言|C语言实现——字符串逆序】由于本人能力有限,若有错误,希望指正!!!
推荐阅读
- 计算机考研|C语言——从字符串中统计单词的频数
- c语言|c语言————字符串的逆序旋转
- C语言小白进阶之路|C语言——字符、字符串的输入输出
- C语言|C语言——字符串旋转问题
- c语言|C语言——字符串分类统计
- 字符串|C语言——字符串学习笔记(2)
- 字符串操作|c语言——字符串右移
- c语言|C语言——指针
- c语言|C语言初阶——2.函数