C语言作业写字符串反转函数 可是输入字符串后反转输出是乱码 求助呀!!

#include <stdio.h>
#include <string.h>
void reverse(char *a);
void main()
{
char str[100];
printf("请输入字符串:");
gets(str);
printf("字符串为:%s\n",str);
reverse(str);
printf("反转后为:");
puts(str);
}

void reverse(char *s)
{
char temp, *end = s + strlen(s) - 1;
while( end > s)
{
temp = *s;
*s = *end;
*end = temp;
--end;
++s;
}
}
比如输入 大中王
输出 跬兄蟠
谢谢各位啦 第一次上网提问 非常感谢啊

中文需要单独处理的,一个中文占两个字节,反转时顺序不变。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void reverse(char* s)

{

int len = strlen(s);

char* pNewStr = (char*)malloc(len + 1) ;

char* pNewMove = pNewStr;

char* pStr = s + len - 1;

while(pStr >= s)

{

unsigned char ch = *pStr;

if(ch > 127) //中文判断 ä¸å¤ªç¡®å®šï¼Œè¿™ä¸ªæ¡ä»¶æ˜¯å¦ä¸¥è°¨ï¼Œåœ¨æœ¬æœºæµ‹è¯•æ²¡é—®é¢˜

{

*pNewMove = *(pStr - 1);

pNewMove ++;

*pNewMove= *pStr;

pNewMove ++;

pStr -= 2;

}else

{

*pNewMove =*pStr;

pNewMove ++;

pStr--;

}

}

pNewStr[len] = '\0';

strcpy(s,pNewStr);

free(pNewStr);

}

int main()

{  

char str[201];

printf("输入要反转的字符串\n");

scanf("%s",str);

reverse(str);

printf("反转后字符变为:\n %s \n",str);

system("pause");

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-28
这里的反转是 英文字母的反转。
如果你要输入中文反转,就需要单独处理,因为一个汉字占两个字节,而一个字母占一个字节。
第2个回答  2011-06-28
我发现问题了,你输入的字符串必须是以字符构成的,不能是汉字。将汉字反序的方法目前我们还没有办法。
第3个回答  2011-06-28
一个汉字占两个字符,而翻转字符串是逐个字符操作的。必然乱码的。