#include?<string.h>
//?字符串倒序可以使用strrev()函數,?這個只能反轉英文,反轉中文會出現亂碼
//?如果需要反轉中文可以使用_mbsrev()(#include?<mbstring.h>)(ANSI模式),?或者用wcsrev()(UNICODE模式),
char?*?myStrrev(char?*?s)
{
char?*?l?=?s,?*?h?=?s?+?strlen(s);
while(l?<?h)?{char?t?=?*l;?*l++?=?*--h;?*h?=?t;}
return?s;
}
int?charAdd(const?unsigned?char?*?ch)
{
if(*ch++?<=?0x80)?return?1;?//?英文
if(*ch>=?0x40)?return?2;?//?中文
else?return?0;?//?錯誤的字符
}
//?這個可以反轉中文
char?*?myMbsrev(char?*?s)
{
size_t?len?=?strlen(s);
unsigned?char?*?buf?=?new?unsigned?char[len?+?4];
unsigned?char?*?h?=?buf?+?len;
unsigned?char?*?l?=?(unsigned?char?*)s;
while(*l)
{
int?ll?=?charAdd(l);
if(ll?==?0)?break;
h?-=?ll;
memcpy(h,?l,?ll);
l?+=?ll;
}
memcpy(s,?h,?len);
delete?buf;
return?s;
}
int?main()
{
char?str[1024];
printf("請輸入壹個英文字符串?:?");
gets(str);
printf("妳輸入的字符串是?:?%s\n",?str);
printf("字符串反轉後是?:?%s\n",?myStrrev(str));
printf("請輸入壹個中文字符串?:?");
gets(str);
printf("妳輸入的字符串是?:?%s\n",?str);
printf("字符串反轉後是?:?%s\n",?myMbsrev(str));
return?0;
}