编程实现以单词 为单位的字符串逆序? 例如 HELLO WORLD ---- WORLD HELLO
目录
实现逻辑
实现代码如下:(完整备注)
执行结果如下:
实现逻辑
当前的实现逻辑,是通过两个指针变量,一个指针<temp>指向原来的字符串的最后一位,然后依次向前偏移,当偏移到' '空格位置时,使用第二个指针<t>,指向当前空格位置,然后 第二个指针,向后依次偏移读取,把读取到的内容,放到新的字符串里,
读取完一个单词后,temp指针继续向前偏移
到字符串的开始位置的时候,由于没有空格,所以需要手动给定,赋值一下
?
实现代码如下:(完整备注)
#include <stdio.h>
#include <string.h>
int main()
{
char buf[128] = "HELLO WORLD I LOVE SLEEP";//这是原来的字符串
char b[128] = {0};//这是转换后的字符串
int len = strlen(buf);//这个算一个字符串的长度
//printf("buf len == %d\n",len);//打印一下玩玩
int i = 0;//这个是给外层循环用的,也可以直接用 while(长度--)
int j = 0;//这个是给内层循环用的
int num = 0;//这个是计数的
int b_n = 0;//这个是 新的字符串数组的下标
char *temp = &buf[len-1];//先让temp指针指向字符串的最后
char *t;//然后定义了一个临时指针,用来复制字符串
//这个外层循环主要是看需要走多少次
for(i=0;i<len;i++)
{
num++;//每进入一次循环,个数加1---记录单词的长度
if(*temp == ' ')
{
t = temp+1;//让新的指针,指向temp现在的位置,然后偏移t,给新的赋值
//因为当前的位置是 空格,需要往后偏移一个
//t++;//
for(j=0;j<num-1;j++)//根据上面的计数,查看执行的次数
{
//printf("---%c---\n",*t);//打印测试一下
b[b_n] = *t;//赋值
t++;//偏移
b_n++;
}
b[b_n] = ' ';//加空格
b_n++;
num = 0;//置0,
//printf("===========\n");
}
temp--;//指向原来的指针往回走
if(i==(len-1))//如果,偏移到最后一位,也就是刚开始的位置,这块没有空格,所以需要主动判断一下
{
t = buf;//指向开头
while(*t != ' ')
{
b[b_n] = *t;//赋值
t++;//偏移
b_n++;
}
}
}
printf("buf -->%s\n",buf);
printf("b -->%s\n",b);
return 0;
}
执行结果如下:
?
附加:
??????? 也可以直接使用 strtok 来裁剪一下 字符串,然后使用 strcat 拼接一下---并未测试
|