首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

字符串处理遇到一个大有关问题,请

2012-03-26 
字符串处理遇到一个大问题,请高手指点.//分割字符串函数,参数说明:Source待处理字符串,Des1、Des2处理后的

字符串处理遇到一个大问题,请高手指点.
//分割字符串函数,参数说明: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 个类..


热点排行