【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);
}