您好,一个汉字占用两个字节(扩展ASCII码),而getchar()每次只能读入一个字节,因此读入汉字时,则需要用gets()函数。
成都创新互联公司专业为企业提供宁德网站建设、宁德做网站、宁德网站设计、宁德网站制作等企业网站建设、网页设计与制作、宁德企业网站模板建站服务,10年宁德做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
倒叙输出汉字串时,有两种方法,一是从字符串末端开始,每次输出两个字节,二是直接汉字将字符串在数组中倒置,然后再用puts()函数直接输出。
以上两种方法都有局限性,一旦含有非汉字字符,极有有可能造成乱码。
#include stdio.h
#include string.h
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;
}
反序方法见 下面 函数 void op(char *s). 主函数是调用的例子。
#include stdio.h
void op(char *s){
int i,k;
char c;
k = strlen(s);
for (i=0;ik/2;i++){c=s[i];s[i]=s[k-i-1];s[k-i-1]=c;};
};
int main()
{
char s[200];
printf("input one line string:\n");
gets(s);
op(s);
printf("%s\n",s);
return 0;
}
输入:abc123
输出:321cba
int main()
{
char str[100], temp;
int i;
scanf("%s", str);
for (i = 0; i strlen(str) / 2; i++)
{
temp = str[strlen(str) - i - 1];
str[strlen(str) - i - 1] = str[i];
str[i] = temp;
}
printf("%s", str);
return 0;
}