vc++中判断字符串中是否有全角数字!

alexhoho 2010-04-26 09:05:51
程序为vc++
其中有一个字符串,其中有可能有全角数字,怎么判断其中是否有全角数字,并且把全角数字替换成半角数字。
如 : 大连6789
求算法,谢谢!
...全文
335 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 alexhoho 的回复:]
可是这样判断的话,只能判断是不是全角,现在我的字符串中还有汉字,汉字是要保留的!!!
只替换数字啊!!
[/Quote]

数字一个就10个
你完全可以确定出它们的编码范围然后有针对性的处理
alexhoho 2010-04-26
  • 打赏
  • 举报
回复
可是这样判断的话,只能判断是不是全角,现在我的字符串中还有汉字,汉字是要保留的!!!
只替换数字啊!!
falconlsq 2010-04-26
  • 打赏
  • 举报
回复
easy a,can find in anywhere
hzy694358 2010-04-26
  • 打赏
  • 举报
回复
1.半角转换为全角

CString CTestExcelChange091230Dlg::DbcToSbc(CString stringText)
{
CString str=L"";

int nLength=stringText.GetLength();
ASSERT(nLength!=0);
TCHAR *c=new TCHAR[sizeof(TCHAR)*nLength+1];
memset(c,0,sizeof(TCHAR)*nLength+1);
wcscpy(c,stringText);
for (int i=0;i<nLength;i++)
{
if (c[i]==32)
{
c[i]=(TCHAR)12288;
continue;
}
if (c[i]<127)
{
c[i]=(TCHAR)(c[i]+65248);
}

}

str.Format(L"%s",c);

delete c;
c=NULL;
return str;
}

2.全角转换为半角

CString CSpss::SbcToDbc(CString stringText)
{
CString str=L"";

int nLength=stringText.GetLength();
ASSERT(nLength!=0);
TCHAR *c=new TCHAR[sizeof(TCHAR)*nLength+1];
memset(c,0,sizeof(TCHAR)*nLength+1);
wcscpy(c,stringText);
for (int i=0;i<nLength;i++)
{
if (c[i]==12288)
{ c[i]=(TCHAR)32;
continue;
}
if (c[i]>65280 && c[i]<65375)
c[i]=(TCHAR)(c[i]-65248);
}

str.Format(L"%s",c);

delete c;
c=NULL;
return str;
}


hzy694358 2010-04-26
  • 打赏
  • 举报
回复
判断楼上已经有了,
转换的话,可以用替换
zswang(伴水清清)(专家门诊清洁工) 写的,参考一下吧
void Str2GBReplace(CString &mString)
{
mString.Replace(" ", " ");
mString.Replace("!", "!");
mString.Replace("""", """);
mString.Replace("#", "#");
mString.Replace("$", "$");
mString.Replace("%", "%");
mString.Replace("&", "&");
mString.Replace("'", "'");
mString.Replace("(", "(");
mString.Replace(")", ")");
mString.Replace("*", "*");
mString.Replace("+", "+");
mString.Replace(",", ",");
mString.Replace("-", "-");
mString.Replace(".", "。");
mString.Replace("/", "/");
mString.Replace("0", "0");
mString.Replace("1", "1");
mString.Replace("2", "2");
mString.Replace("3", "3");
mString.Replace("4", "4");
mString.Replace("5", "5");
mString.Replace("6", "6");
mString.Replace("7", "7");
mString.Replace("8", "8");
mString.Replace("9", "9");
mString.Replace(":", ":");
mString.Replace(";", ";");
mString.Replace("<", "<");
mString.Replace("=", "=");
mString.Replace(">", ">");
mString.Replace("?", "?");
mString.Replace("@", "@");
mString.Replace("A", "A");
mString.Replace("B", "B");
mString.Replace("C", "C");
mString.Replace("D", "D");
mString.Replace("E", "E");
mString.Replace("F", "F");
mString.Replace("G", "G");
mString.Replace("H", "H");
mString.Replace("I", "I");
mString.Replace("J", "J");
mString.Replace("K", "K");
mString.Replace("L", "L");
mString.Replace("M", "M");
mString.Replace("N", "N");
mString.Replace("O", "O");
mString.Replace("P", "P");
mString.Replace("Q", "Q");
mString.Replace("R", "R");
mString.Replace("S", "S");
mString.Replace("T", "T");
mString.Replace("U", "U");
mString.Replace("V", "V");
mString.Replace("W", "W");
mString.Replace("X", "X");
mString.Replace("Y", "Y");
mString.Replace("Z", "Z");
mString.Replace("[", "[");
mString.Replace("\\", "\");
mString.Replace("]", "]");
mString.Replace("^", "^");
mString.Replace("_", "_");
mString.Replace("`", "`");
mString.Replace("a", "a");
mString.Replace("b", "b");
mString.Replace("c", "c");
mString.Replace("d", "d");
mString.Replace("e", "e");
mString.Replace("f", "f");
mString.Replace("g", "g");
mString.Replace("h", "h");
mString.Replace("i", "i");
mString.Replace("j", "j");
mString.Replace("k", "k");
mString.Replace("l", "l");
mString.Replace("m", "m");
mString.Replace("n", "n");
mString.Replace("o", "o");
mString.Replace("p", "p");
mString.Replace("q", "q");
mString.Replace("r", "r");
mString.Replace("s", "s");
mString.Replace("t", "t");
mString.Replace("u", "u");
mString.Replace("v", "v");
mString.Replace("w", "w");
mString.Replace("x", "x");
mString.Replace("y", "y");
mString.Replace("z", "z");
mString.Replace("{", "{");
mString.Replace("|", "|");
mString.Replace("}", "}");
mString.Replace("~", "~");
}
Fireway2008 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 alexhoho 的回复:]
1楼的大大,主要字符串中全角数字的位置是不确定的啊!
还有没有别的方法?
[/Quote]

LZ你不是为了判断有 无吗?

用遍历的方法吧。
1.
//也可以通过0x80来判断阿~~
char *p;
p=....//指向一个指针
if((*p)&0x80)// 全角字符
{
//相关处理
}
else// 半角字符
{
//相关处理
}
2.//IsDBCSLeadByte(byte);
//如果返回TRUE, 则是双字节的
//否则是单字节的
alexhoho 2010-04-26
  • 打赏
  • 举报
回复
1楼的大大,主要字符串中全角数字的位置是不确定的啊!
还有没有别的方法?
hellward 2010-04-26
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20060818/14/4959228.html
alexhoho 2010-04-26
  • 打赏
  • 举报
回复
谢谢各位帮忙,问题已经解决了,我不判断,只用repalce方法进行替换了,谢谢各位,这里加分了!

16,467

社区成员

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

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

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