C语言作业写字符串反转函数 可是输入字符串后反转输出是乱码 求助呀!!
#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;
}
如果你要输入中文反转,就需要单独处理,因为一个汉字占两个字节,而一个字母占一个字节。