c语言 倒序输出字符串

2025-02-03 03:50:53
推荐回答(3个)
回答1:

您好,一个汉字占用两个字节(扩展ASCII码),而getchar()每次只能读入一个字节,因此读入汉字时,则需要用gets()函数。
倒叙输出汉字串时,有两种方法,一是从字符串末端开始,每次输出两个字节,二是直接汉字将字符串在数组中倒置,然后再用puts()函数直接输出。
以上两种方法都有局限性,一旦含有非汉字字符,极有有可能造成乱码。
#include
#include
unsigned char *InverseStr(unsigned char t[],unsigned char s[]) {
int i,j,len = strlen((char *)s);
for(i = len - 1,j = 0; i >= 0; --i,++j) {
if(s[i] > 0X7F) { // 是汉字
t[j++] = s[i - 1];
t[j] = s[i];
--i;
}
else t[j] = s[i];
}
t[j] = '\0';
return t;
}
int main() {
unsigned char s[] = "C语言char数据类型练习";
unsigned char t[25];
printf("s = \"%s\"\n",s);
printf("t = \"%s\"\n",InverseStr(t,s));
return 0;
}

回答2:

#include
#include
int main ()
{
 char string[100];
 int i;
 char c;
 gets(string);
 for(i=strlen(string);i--;)//<--------------
  printf("%c",string[i]);//<--------------
 return 0;
}

回答3:

为什么我用你的程序测试是正常的?
你的程序逻辑搞复杂了,我给你改一个版本:
#include

int
main()
{
int
i=5;
void
converse(int
n);
printf("Input
5
characters:");
converse(i);
printf("\n");
return
1;
}
void
converse(n)
{
char
next;
if(n
==
0)
return;
next=getchar();
converse(n-1);
putchar(next);
}
记住你输入的任何字符都会算入5个之内,包括空格,换行,table等