C语言如何逆序输出一句中文的话

就是不知道怎么用数组接收中文字符,然后遍历输出

中文是双字节编码,要用 wchar。若是中文与英文混合码,则比较麻烦。
若用 char ,全中文,可以尝试 双字节交换再输出。例如:
int main( )
{
char str[80]="尝试双字节交换再输出";
char t1,t2;
int L,i;
L=strlen(str);
for (i=0;i<L/2;i=i+2){
t1=str[i];t2=str[i+1];
str[i] = str[L-2-i]; str[i+1]=str[L-1-i];
str[L-2-i]=t1; str[L-1-i]=t2;
}
printf("%s",str);
return 0;
}追问

谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-05-05
给你提供点思路, 中文中文的编码不同, 所占的字符是不一样的,
有的是一个中文占两个字符, 有的占3个字符, 你可以先拿一个中文试试, 看你的是占几个字符的, 然后倒序输出的时候就 再每隔2个(假如一个中文是两个字符)字符转一下输出, 这样输出的就不会乱码了, 而且达到倒转中文的效果
第2个回答  2018-05-05
试下把输出改成printf("%c",str[i]);追问

改了以后还是不行,乱码了

追答

哦,你用了strlen()函数,要加上include的头文件

我试了下,好像真的不行诶,你等下一个人回答吧,抱歉啦

追问

没事啊,谢谢你帮我看代码

第3个回答  2019-06-18
我之前以为是一个汉字两个字节,但后来发现居然是三个(可能是用手机编译的原因,也可能是其它原因,我没有深究),但我用下面的程序弄出来了。你可以参考下。
#include<stdio.h>
#include<string.h>

int main()
{
int i, l;
char str[100], str0[100];

gets(str);
l = strlen(str);
for (i = 0; str[i] != '\0'; i = i + 3)
{
str0[i] = str[l - i - 3];
str0[i + 1] = str[l - i - 2];
str0[i + 2] = str[l - i - 1];
}
puts(str0);

return 0;
}
相似回答