注意:高分求解,如何将字符串中的汉字、数字、字母、标点符号区别开来(100分)

lihhll 2001-11-02 04:02:42
各位大虾:

有一字符串:
CString ss;
ss="甲a乙b丙3,xy56:我爱你。";
如何将ss中的汉字、数字、字母、标点符号区别开来。汉字占2个字节,数字、字母,和标点占一个字节,该如何区分。
...全文
185 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihhll 2001-11-03
  • 打赏
  • 举报
回复
感谢楼上各位的指点,改天俺在太白楼设宴答谢各位,叫俺翠花为各个上酸菜。
iconlee 2001-11-02
  • 打赏
  • 举报
回复
good
swordbroken 2001-11-02
  • 打赏
  • 举报
回复
CString str = "甲a乙b丙3,xy56:我爱你。";

char a[100][3];

int i, j = 0;
bool first = false;
for ( i = 0; i < str.GetLength(); i ++ )
{
if(str.GetAt(i) > 0)
{
a[j][0] = str.GetAt(i);
a[j][1] = '\0';
j++;
}
else
{
first = !first;
if(first == false)
{
a[j][0] = str.GetAt(i-1);
a[j][1] = str.GetAt(i);
a[j][2] = '\0';
j ++;
}
}
}

这样a[0]=甲;
a[1]=a;
a[2]=乙;
a[3]=,;
a[4]=3;.......等等

写得太乱了,将就着看吧
awanghero 2001-11-02
  • 打赏
  • 举报
回复
上面是我用递归做的一个运算表达式的例程,有兴趣可以给你看一看
awanghero 2001-11-02
  • 打赏
  • 举报
回复
小子,找本编译原理的书看看吧
下面是一段提一串整数的代码,别的功能你就自已琢磨一下怎么实现吧
float CExpressionCalculate::ExtractNum(CString &strExpress)
{
if(strExpress.IsEmpty())
{
m_bError=TRUE;
return 0;
}

if(this->FirstCharType(strExpress)==operater)
return this->ExtracSubExpressVal(strExpress);

float fResult=0;
for(int i=0;i<strExpress.GetLength();i++)
{
char cDigit=strExpress.GetAt(i);
if(cDigit!='.' && !(cDigit<='9'&&cDigit>='0'))//if not is digital
break;
}
CString strNum;
strNum=strExpress.Left(i);
sscanf((const char*)strNum,"%f",&fResult);


if(i==strExpress.GetLength())
strExpress.Empty();
else
strExpress=strExpress.Right(strExpress.GetLength()-i);

return fResult;
}
lihhll 2001-11-02
  • 打赏
  • 举报
回复
楼上各位大虾:
非上感谢,但我是菜鸟。能不能给点代码演示指点一下。
例如:把他变成:
char A,B,C,D,E,....K;
A=甲;
B=a;
C=乙;
D=,;
E=3;.......等等这种形式。
swordbroken 2001-11-02
  • 打赏
  • 举报
回复
汉字等双字节的ASCII码为负值,你用
ss.GetAt(n);
如果得到负值就检查前后的是否为负值,如果为负就结合起来显示,即可

不过如果前后都是负值,你需要从前面第一个是负值的算起,每两个为一个汉字,千万不能错,要不然。。。。

:-)
w_j76 2001-11-02
  • 打赏
  • 举报
回复
input index "code page 932"in the msdn ,you can find the answer
lihhll 2001-11-02
  • 打赏
  • 举报
回复
楼上各位大虾:
非上感谢,但我是菜鸟。能不能给点代码演示指点一下。
Fortress 2001-11-02
  • 打赏
  • 举报
回复
有一些现成的API,如:isalnum, iswalnum islower, iswlower
isalpha, iswalpha isprint, iswprint
__isascii, iswascii ispunct, iswpunct
iscntrl, iswcntrl isspace, iswspace
__iscsym, __iscsymf isupper, iswupper
isdigit, iswdigit isxdigit, iswxdigit
isgraph, iswgraph iswctype
你自己看一下帮助吧。
对汉字可用:_ismbblead
jason802 2001-11-02
  • 打赏
  • 举报
回复
判断ASCII码!
48-57数字
65-90大写字母
97-122小写字母
符号在ASCII中分好几段。
汉字>127

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧