一.字符串的直接倒叙
输入一个字符串,实现倒叙输出,我想到的方法有两种:
首先把输入的字符串存入一个数组;
1.方法一:直接逆序打印这个数组,即从最后一个元素向前打印;
C代码:
#include <stdio.h>
int main()
{
//输入一个字符串,逆序打印
int len=0;
char s[20]={0};
printf("请输入一个字符串:\n");
fgets(s,sizeof(s),stdin);//可以输入任何字符,包括回车符
for(len=0;s[len]!='\0';len++);//计算字符串长度
len--;//去掉回车符后实际字符长度
for(int i=0;i<len;i++)
{
printf("%c",s[len-i-1]);//逆序打印数组
}
printf("\n");
return 0;
}
结果如下图:
2.方法二:对称交换元素位置后,直接打印这个数组;
C代码:
#include <stdio.h>
int main()
{
//输入一个字符串,倒叙输出(对称交换位置)
int len=0;
char s[20]={0};
printf("请输入一个字符串:\n");
fgets(s,sizeof(s),stdin);//可以输入任何字符,包括回车符
for(len=0;s[len]!='\0';len++);//计算字符串长度
len--;//最后是回车符,所以减一
for(int i=0;i<len/2;i++)//对称交换位置
{
//经过3次'^'运算,可以实现数据的交换
s[i]^=s[len-i-1];
s[len-i-1]^=s[i];
s[i]^=s[len-i-1];
}
printf("%s",s);//打印新数组
// printf("\n");//由于前面回车符还在最后面,所以不用换行
return 0;
}
结果如下图:
二.单词的倒叙输出
如:输入一个字符串 "are you ok" 单词倒叙输出 "ok you are" 单词字母本身顺序没有变化,单词顺序改变;我的思路是先把字符串全部倒叙,再逆序一个单词
C代码:
#include <stdio.h>
int main()
{
//单词倒叙
int len=0,k=0,l=0,temp=0;
char s[50],a[50]={0};
printf("请输入:\n");
fgets(s,sizeof(s),stdin);//可以输入任何字符,包括回车符
for(len=0;s[len]!='\0';len++);//计算数组长度
//printf("%d\n",len);//不明白的可以打印长度看看
len--;
s[len]=0;//替换掉回车符
len--;
for(k=0;k<=len;k++)//也可以不用存入新数组,直接对称交换位置
{
a[k]=s[len-k];//逆序存入新数组
}
// printf("[%s]\n",a);//打印逆序数组
for(int i=0;i<=len+1;i++)
{
if(a[i]==' '||a[i]=='\0')//检测空格和结束符
{
//for(l=0;l<i-temp-1;l++);//计算单个单词长度
l=i-temp;//计算单个单词长度
for(int j=0;j<l/2;j++)//逆序一个单词,对称交换位置
{
a[j+temp]^=a[i-j-1];
a[i-j-1]^=a[j+temp];
a[j+temp]^=a[i-j-1];
}
temp=i+1;
}
}
printf("%s",a);
printf("\n");
return 0;
}
结果如下图:
注:如果有错的地方,或者有更好的方法,请大佬们指点指点