【1】目的:实现字符串的逆序输出,比如I believe you.变为you. believe I的形式。
【2】基本思路:这里我们先创建一个可以实现逆序打印的函数,将字符串逆序变为.uoy eveileb I,然后再将每个字符串逆序,从而变为you. believe I的样式。
【3】总结:先创建一个逆序打印函数,然后进行整个字符串的逆序,再通过空格/‘\0’为分界实现每个字符串的逆序。
【4】代码实现:
1.字符串函数创建
创建两个指针分别指向最左端字符和最右端字符,left<right时,将最左端与最右端字符交换,left++ right--实现逐个字符交换。
void reverse(char* left, char* right)//逆序字符串{while (left < right) //交换左右字符{int temp = *left;*left = *right;*right = temp;left++;right--;}}
void main(){char arr[100] = { 0 };gets_s(arr);char* left = arr;char* right = arr + strlen(arr) - 1;reverse(left, right);}
注意:VS中gets( )函数写成gets_s( )才可以运行
2.创建两个新的指针变量,char*start指向每个字符串的第一个字符,因此得放在循环中。char*ch遍历每个字符串从而确定字符串最后一个字符。可以发现当*ch为‘ ’或是‘\0’时读取一个字符串结束,以此作为循环的判断条件
char* ch = arr;while (*ch){char* start = ch;while (*ch != ' ' && *ch != '\0')//判断字符串结束{ch++; //指针后移,最终指向‘ ’或‘\0’}reverse(start, ch-1);//传参 传入首指针和尾指针if(*ch != '\0') //如果为‘\0’则表示一整句话结束,退出循环{ch++;}}
3.输出
printf("%s", arr);
4.完整代码实现
#include<string.h>void reverse(char* left, char* right)//逆序字符串{while (left < right) //交换左右字符{int temp = *left;*left = *right;*right = temp;left++;right--;}}void main(){char arr[100] = { 0 };gets_s(arr);char* left = arr;char* right = arr + strlen(arr) - 1;reverse(left, right);char* ch = arr;while (*ch){char* start = ch;while (*ch != ' ' && *ch != '\0')//判断字符串结束{ch++; //指针后移,最终指向‘ ’或‘\0’}reverse(start, ch-1);//传参 传入首指针和尾指针if(*ch != '\0') //如果为‘\0’则表示一整句话结束,退出循环{ch++;}}printf("%s", arr);}