字符串处理遇到一个大问题,请高手指点.
//分割字符串函数,参数说明:Source待处理字符串,Des1、Des2处理后的输出结果,如果
//Source的长度 <=24字节,Des1=Source;如果Source的长度> 24字节,Des1+Des2=Source
//(注:调用本函数时,对于输出数参数Des1、Des2必须要事先分配好内存。)
int DivisionChr(char *Source,char*Des1,char* Des2)
{
int slen;
int i,j;
slen=strlen(Source);
if(slen <=24)
for(i=0;i <24;i++)
Des1[i]=Source[i];
else
{
for(i=0;i <24;i++)
Des1[i]=Source[i];
for(j=0;j <(slen-24);j++)
Des2[j]=Source[j+i];
}
return 0;
}
main()
{
char Source[]= "鞍钢新轧蒂森克虏伯镀锌钢板有限公司(艾托利) ";
char Des1[30]= " ";
char Des2[30]= " ";
DivisionChr(Source,Des1,Des2);
}
这样看没什么问题.
可是当char Source[]= "松峪里公建1—43号(3号楼北9号网点) ";
截取到第24个字节的时候就不行了, "北 "字占的是第24和25个字节,这样结果就错了,怎么能够把字符和汉字准确的区分开.
[解决办法]
汉字的最高位为1,然后进行计数,两个字节一个汉字。
[解决办法]
.看你怎么喜欢喽
个人建议标准统一化。统一用wchar_t
[解决办法]
就把char替换成wchar_t,strlen要用lstrlen代替。
[解决办法]
把函数修改成下面的就可以了
int DivisionChr(char *Source,char*Des1,char* Des2)
{
int slen;
int i,j;
int num = 0;
int pos;
slen=strlen(Source);
if(slen <=24)
for(i=0;i <slen;i++)
Des1[i]=Source[i];
else
{
for(i=0;i < 24;i++)
{
if( Source[i] > 0 ) //判断有几个非汉字字符
num++;
}
if( num % 2 == 0 )
pos = 24;
else
pos = 23;
for( j = 0; j < pos; j++ )
Des1[j] = Source[j];
for(j=0;j <(slen-24);j++)
Des2[j]=Source[j+ pos];
}
return 0;
}
[解决办法]
LZ,搞定没?楼上的说的好,照他说的试
[解决办法]
关于wchar_t怎么用,我想不该在这里问吧。
自个去查MSDN就行了,写得比谁都详细
[解决办法]
CString str( " " );//定义源字符串
CStringArray strArr;
int m_length;
CSting m_temp[2];
strArr.RemoveAll();
m_length = strArr.GetLength();//源字符串的长度;
if( m_length < 24 )
{
strArr.Add( str.Mid( 0,m_length ) );
m_temp[0] = str.Mid( 0,m_length );
}
else
{
for( int i = 0;i < m_length;i += ( m_length / 2 ) )
{
cstrArr.Add( str.Mid( i,m_length / 2 ) );
m_temp[i] = str.Mid( i,m_length / 2 ); /* 输出的2 字符串是依 源字符串长度的一 半分开的 */
}
}
//-------------------------
使用了MFC封装的2 个类..