一.字符串的直接倒叙
输入一个字符串,实现倒叙输出,我想到的方法有两种:
首先把输入的字符串存入一个数组;
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;
}
结果如下图:

注:如果有错的地方,或者有更好的方法,请大佬们指点指点