这篇文章主要介绍“C语言如何实现倒置字符串”,在日常操作中,相信很多人在C语言如何实现倒置字符串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现倒置字符串”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
事例:
输入下列字符:
I like beijing.
输出的字符:
beijing. like I
1、设立一个数组存放输入的字符串
2、将其中每个单词进行逆置 得到 I ekil .gnjieb
3、再将字符串逆置 得到beijing.like I
1.设立一个数组存放输入的字符串
#include <stdio.h> int main() { char arr[100] = { 0 }; gets(arr);//注意没有使用scanf,因为scanf遇到空格就会停止接收输入的内容 printf("%s\n",arr); return 0; }
2、将每个单词进行逆置
这其中需要注意几点:
1.整个语句如何结束循环
2.每个单词的起始位置和结束位置
3.内部如何实现
4. 判断语句结束,从而停止逆序
语句如何结束循环:
char* t = arr;//将字符数组首元素的地址放入指针变量t中 while (*t!='\0') { //判断当*t指向'\0'时循环结束。 }
每个单词的起始位置和结束位置 :
char* t = arr;//将字符数组首元素的地址放入指针变量t中 while (*t!='\0') { //判断当*t指向'\0'时循环结束。 char* start = t; char* end = t; //当末指针指向空格,并且指向‘\0'循环结束。 while (*end != ' '&&*end != '\0') { end++; }
内部怎么实现:
我们需要再自己定义一个函数reverse,用来实现字符串的交换
void reverse(char* left, char* right) { while (left < right) {//只有当左边的地址小于右边的地址时,才交换,中间的不需要交换 char tmp = *right; *right = *left; *left = tmp; left++; right--; } }
再调用这个函数:
int main() { char arr[100] = { 0 }; gets(arr); //输入字符数组 char* t = arr;//将字符数组首元素的地址放入指针变量t中 while (*t!='\0') { //判断当*t指向'\0'时循环结束。 char* start = t; char* end = t; //当末指针指向空格,并且指向‘\0'循环结束。 while (*end != ' '&&*end != '\0') { end++; } reverse(start, end - 1); }
怎样判断语句结束呢,从而停止逆序呢
if (*end != '\0')//判断是否到了字符串末尾 t = end + 1;//让指针p指向下一个单词,让循环进入下一个单词 else t = end;
3、将字符串逆置
这个要用到计算字符串长度的strlen函数,
int len = strlen(arr);
再调用reverse函数:
reverse(arr, arr + len - 1);
void reverse(char* left, char* right) { while (left < right) { char tmp = *right; *right = *left; *left = tmp; left++; right--; } } int main() { char arr[100] = { 0 }; gets(arr); //输入字符数组 char* t = arr;//将字符数组首元素的地址放入指针变量t中 while (*t!='\0') { //判断当*t指向'\0'时循环结束。 char* start = t; char* end = t; //当末指针指向空格,并且指向‘\0'循环结束。 while (*end != ' '&&*end != '\0') { end++; } reverse(start, end - 1); if (*end != '\0')//判断是否到了字符串末尾 t = end + 1;//让指针p指向下一个单词,让循环进入下一个单词 else t = end; } int len = strlen(arr); reverse(arr, arr + len - 1); printf("%s\n", arr); return 0; }
方法二的思路是这样先用t指向字符串的末尾,然后往前走,找到空格时,printf一下,以%s格式,这样打印只需要给字符串的首地址,它打印到\0停下。我们打印完一个单词后,把t的位置变成\0,然后继续往前走,直到数组开始位置。
t指针开始指向字符串最后一个字符,然后往前遍历,直到空格或者t到了最开始的字符位置,这里分两种情况,到空格位置,要把空格位置变成\0,打印cur+1位置,到首字符,打印cur位置。
其中需要注意一点,我们把空格位置变成了\0,所以在第一种情况需要打印的时候在加个空格
代码如下:
int main() { char arr[100] = { 0 }; gets(arr); char* t = arr + strlen(arr) - 1; //将t指针指向字符串最后一个字符 while (t > arr) //当t指针的地址大于arr首元素地址开始循环 { while (*t != ' ' && t > arr) //当t不为空格时,t指针往前循环指向 { t--; } if (t == arr) { printf("%s", t); } else //到空格,打印t+1位置 { printf("%s ", t + 1); *t = '\0'; //把空格位置变成‘\0' } } return 0; }
到此,关于“C语言如何实现倒置字符串”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。