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

#include<stdio.h>#include<string.h>voidreverse(char*a);voidmain(){charstr[100];printf... #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;
}
}
比如输入 大中王
输出 跬兄蟠
谢谢各位啦 第一次上网提问 非常感谢啊
展开
 我来答
牛眼视野
2011-06-28 · 生活百般滋味,记录生活所看所思
牛眼视野
采纳数:195 获赞数:832

向TA提问 私信TA
展开全部

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

#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;

}

松甜恬0Je4ba
2011-06-28 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3420万
展开全部
这里的反转是 英文字母的反转。
如果你要输入中文反转,就需要单独处理,因为一个汉字占两个字节,而一个字母占一个字节。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我问问题问到底
2011-06-28 · TA获得超过512个赞
知道小有建树答主
回答量:413
采纳率:50%
帮助的人:210万
展开全部
我发现问题了,你输入的字符串必须是以字符构成的,不能是汉字。将汉字反序的方法目前我们还没有办法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Giraffia
2011-06-28 · 超过20用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:56.8万
展开全部
一个汉字占两个字符,而翻转字符串是逐个字符操作的。必然乱码的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式