求字符串逆序函数,串内是中英文字符混合,请各位前辈指点。
如题,要求能写出一函数或程序,实现如下功能:
源字符串为: "This 是一个 C++程序";
经过相关代码逆序后成为:"序程++C 个一是 sihT";
要求,类型自定义,能有屏幕输出,请前辈们指点,如能写出完整的程,深为感谢
问题点数:40、回复次数:10Top
1 楼happyparrot(快乐鹦鹉)回复于 2005-11-07 16:55:24 得分 0
遍历。如果字符大于0x80,则为中文,将连续的两个字符一起放到新字符串的末尾Top
2 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2005-11-07 16:59:12 得分 10
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
char * Inverse(const char * pSrc)
{
int len = strlen(pSrc);
if ( len ) {
char * pTarget = new char[len];
unsigned char * p1 = (unsigned char *)pSrc;
char * p2 = pTarget + len - 1;
for ( int i=0; i<len; i++)
{
if ( *p1 <=0x80 )
*p2-- = *p1++;
else {
*p2 -- = p1[1];
*p2 -- = *p1;
p1 += 2;
i++;
}
}
return pTarget;
} else
return NULL;
};
int main()
{
char * pSrc = "This 是一个 C++程序";
char * pT = Inverse(pSrc);
printf("%s", pT);
delete pT;
return 0;
};Top
3 楼anranxon(jack)回复于 2005-11-07 17:00:40 得分 0
一个汉字字符是占两个字节还是四个?为什么:sizeof('汉')=4 而 sizeof("汉")=3Top
4 楼anranxon(jack)回复于 2005-11-07 17:02:35 得分 0
谢谢,上面的程序运行得很好
Top
5 楼yelling(Ray(←☆→射手))回复于 2005-11-07 17:19:38 得分 0
to anranxon(jack)
两个高位为1的字节Top
6 楼gumbour(gub不是bug)回复于 2005-11-07 17:59:17 得分 10
sizeof('汉')=4 中的'汉'是一个整数,32位的C编译器里面把''之内字符数2-4个的数据处理为4字节整数
sizeof("汉")=3 中的汉是以\0结尾字符串,长度为strlen("汉")+1
Top
7 楼Kid4you(Kid4you)回复于 2005-11-07 18:13:07 得分 10
#include <iostream.h>
/* 逆序输出字符串(带中文),递归方式 */
void reverse(char *str)
{
if ( *str == '\0' ) return;
if ( *str < 0 )
{
reverse( str + 2 );
cout<<*str<<(*(str+1));
}
else
{
reverse( str + 1 );
cout << *str;
}
}
void main()
{
char str[] = "AZaz冬天";
reverse(str);
}
}
Top
8 楼tufaqing()回复于 2005-11-07 18:21:19 得分 0
可以先变成wchar(A2W)逆转,再变成char(W2A)Top
9 楼codearts(代码艺术)回复于 2005-11-07 19:22:22 得分 10
俺调试了一个用wchar_t的程序
#include <stdio.h>
//#include <tchar.h>
#include <iostream>
#include <io.h>
#include <fcntl.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t wStr[] = L"This 是一个 C++程序";
_setmode( _fileno( stdout ), _O_WTEXT);
wprintf_s(L"%s\n", wStr);
wchar_t* pLast = wStr;
while (*pLast++) NULL;
pLast -= 2;
wchar_t* pFirst = wStr;
wchar_t chTemp;
while (pFirst < pLast)
{
chTemp = *pFirst;
*pFirst++ = *pLast;
*pLast-- = chTemp;
}
wprintf_s(L"%s", wStr);
getchar();
return 0;
}
Top
10 楼anranxon(jack)回复于 2005-11-08 09:28:55 得分 0
嗯,多谢谢几位前辈指点,结了Top




