弱问题:如何判断CString是数字。立即结分。 一个CString字符串,如何判断他是一个数字,比如2或1.34而不是sad或s12等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最笨的方法: 检查ASCII码。 char c;for(int i= 0;i<str.GetLength();i++){ c = str.GetAt(i); ......检查c是否是在‘0'到'9'之间或者是否等于'.' 写一个小函数,用来对每一个字符进行检查。比如:for(int i=0;i<str.GetLength();i++){ if((str.GetAt(i)<'0' || str.GetAt(i)>'9') && str.GetAt(i)!='.') { //出错 }} 好象MFC里面有个 IsNumber() 你查查看看 像这类问题,最好使用正则表大式,正则表大式类在VC中没,在C#,JAVA中都有,但是VC中有开源你可下载一个看看 不好意思我是在一段程序中看到的 刚才的函数是这样实现的bool IsNumber( LPCTSTR pszText ){ ASSERT_VALID_STRING( pszText ); for( int i = 0; i < lstrlen( pszText ); i++ ) if( !_istdigit( pszText[ i ] ) ) return false; return true;} 1 判断是否整数bool CDlgInfo::_isdigitstr(const char* str, int count){ if ( str == NULL || *str == '\0') { return false; } int count1 = 0; int count2 = 0; while(isdigit( *str )|| (*str)=='+'|| (*str)=='-'|| (*str)=='a'|| (*str)=='A'|| (*str)=='b'|| (*str)=='B'|| (*str)=='c'|| (*str)=='C'|| (*str)=='d'|| (*str)=='D'|| (*str)=='e'|| (*str)=='E'|| (*str)=='f'|| (*str)=='F'|| (*str)==',') { if ( (*str == '+')|| (*str == '-') ) { count1 += 1; } if (*str == ',') { count2 += 1; } str++; } if ( (count1 > count)|| (count2 > count-1) ) { return false; } else { return (*str== '\0')?true:false; }}2 判断是否浮点数bool CDlgInfo::_isFloatstr(const char* str, int count){ if ( str == NULL || *str == '\0') { return false; } int count1 = 0; int count2 = 0; int count3 = 0; while( isdigit( *str )|| (*str)=='+'|| (*str)=='-'|| (*str)=='.'|| (*str)==',' ) { if ( (*str)=='+'||(*str)=='-' ) { count1 += 1; } if ( (*str)=='.' ) { count2 += 1; } if ( (*str)==',' ) { count3 += 1; } str++; } if ( (count1 > count)|| (count2 > count)|| (count3 > count-1) ) { return false; } else { return (*str== '\0')?true:false; }} char c;for(int i= 0;i<str.GetLength();i++){ c = str.GetAt(i); if(c>='0'&&c<='9'){//符合数字的条件} else MessageBox("发现非数字存在!","提示",MB_OK);} this->UpdateData(); CString str; int pos2; int pos=this->m_ptxtSFJE.FindOneOf("~!@#$%^&*()_+|`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-=\\{}[]:\";'<>?,/ "); if(pos!=-1) { this->m_ptxtSFJE.Delete(pos); str=this->m_ptxtSFJE; this->m_ptxtSFJE=""; this->UpdateData(false); // this->m_ptxtEndNo.Replace(str); this->m_potxtSFJE.ReplaceSel(str); //m_ptxtEndNo } UpdateData(); pos=m_ptxtSFJE.FindOneOf("."); if (pos!=-1) { pos2=m_ptxtSFJE.Find(".",pos+1); if (pos2!=-1) { this->m_ptxtSFJE.Delete(pos2); str=this->m_ptxtSFJE; this->m_ptxtSFJE=""; this->UpdateData(false); // this->m_ptxtEndNo.Replace(str); this->m_potxtSFJE.ReplaceSel(str); } } UpdateData(); pos=m_ptxtSFJE.FindOneOf("."); if (pos!=-1) { pos2=m_ptxtSFJE.Find(".",pos+1); if (pos2!=-1) { this->m_ptxtSFJE.Delete(pos2); str=this->m_ptxtSFJE; this->m_ptxtSFJE=""; this->UpdateData(false); // this->m_ptxtEndNo.Replace(str); this->m_potxtSFJE.ReplaceSel(str); } }在一个CEdit的输入框的OnUpdate事件中输入这些代码绝对不会出现1.2.3的情况.吐血贡献了.呵呵!~ 使用boost中的RegEx了 简单(正则表达式)#include <boost/regex.hpp>try { boost::wregex reg(L"\\d*.?\\d*"); std::basic_string<wchar_t> str1=L"12.11"; std::basic_string<wchar_t> str1=L"1.2.3"; std::basic_string<wchar_t> result; int b=result=boost::regex_match(ss,reg); printf("%s",b?"true":"false"); b=result=boost::regex_match(ss,reg); printf("%s",b?"true":"false"); } catch(boost::bad_expression e) { printf("%s",e.what()); } 简单的办法,不知道行不行。1.先把cstring1 转化为 数字i(atof());2.再把数字i转化为cstring2,3.比较cstring1,cstring2的长度,若相等则是一个数字。 如何将内存中二进制数据字节序前后颠倒 关于SafeArray的疑问 关于窗口控件的问题 向函数传递类类型时候,C++ 按值传递, C# 则是引用传递? 菜鸟问题:为什么总是编译不成功??!!(我是新手) 关于背包问题 能用int 13读取2048柱,1头,1扇区吗? 问大家几个IT的常用词语的意思:SA,SD,DD,PG,ST,UI,TS,OM,OP,AU,PM 圖像處理問題:要在一個bmp圖象中按指定大小、位置取出其子圖該如何做? MFC中使用Mscomm的get_CommEvent()返回值为6 虚函数的问题!! 新版软考教材关于最小生成树算法的问题请教
for(int i= 0;i<str.GetLength();i++)
{
c = str.GetAt(i);
......
检查c是否是在‘0'到'9'之间或者是否等于'.'
比如:for(int i=0;i<str.GetLength();i++)
{
if((str.GetAt(i)<'0' || str.GetAt(i)>'9') && str.GetAt(i)!='.')
{
//出错
}
}
你查查看看
bool IsNumber( LPCTSTR pszText )
{
ASSERT_VALID_STRING( pszText ); for( int i = 0; i < lstrlen( pszText ); i++ )
if( !_istdigit( pszText[ i ] ) )
return false; return true;
}
bool CDlgInfo::_isdigitstr(const char* str, int count)
{
if ( str == NULL || *str == '\0')
{
return false;
}
int count1 = 0;
int count2 = 0; while(isdigit( *str )||
(*str)=='+'||
(*str)=='-'||
(*str)=='a'||
(*str)=='A'||
(*str)=='b'||
(*str)=='B'||
(*str)=='c'||
(*str)=='C'||
(*str)=='d'||
(*str)=='D'||
(*str)=='e'||
(*str)=='E'||
(*str)=='f'||
(*str)=='F'||
(*str)==',')
{
if ( (*str == '+')||
(*str == '-') ) {
count1 += 1;
} if (*str == ',')
{
count2 += 1;
} str++;
}
if ( (count1 > count)||
(count2 > count-1) )
{
return false;
}
else
{
return (*str== '\0')?true:false;
}
}2 判断是否浮点数
bool CDlgInfo::_isFloatstr(const char* str, int count)
{
if ( str == NULL || *str == '\0')
{
return false;
} int count1 = 0;
int count2 = 0;
int count3 = 0;
while( isdigit( *str )||
(*str)=='+'||
(*str)=='-'||
(*str)=='.'||
(*str)==',' )
{
if ( (*str)=='+'||(*str)=='-' )
{
count1 += 1;
}
if ( (*str)=='.' )
{
count2 += 1;
}
if ( (*str)==',' )
{
count3 += 1;
}
str++;
} if ( (count1 > count)||
(count2 > count)||
(count3 > count-1) ) {
return false;
}
else
{
return (*str== '\0')?true:false;
}
}
for(int i= 0;i<str.GetLength();i++)
{
c = str.GetAt(i);
if(c>='0'&&c<='9'){//符合数字的条件}
else MessageBox("发现非数字存在!","提示",MB_OK);
}
CString str;
int pos2; int pos=this->m_ptxtSFJE.FindOneOf("~!@#$%^&*()_+|`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-=\\{}[]:\";'<>?,/ ");
if(pos!=-1)
{
this->m_ptxtSFJE.Delete(pos);
str=this->m_ptxtSFJE;
this->m_ptxtSFJE="";
this->UpdateData(false);
// this->m_ptxtEndNo.Replace(str);
this->m_potxtSFJE.ReplaceSel(str);
//m_ptxtEndNo
} UpdateData();
pos=m_ptxtSFJE.FindOneOf(".");
if (pos!=-1)
{
pos2=m_ptxtSFJE.Find(".",pos+1);
if (pos2!=-1)
{
this->m_ptxtSFJE.Delete(pos2);
str=this->m_ptxtSFJE;
this->m_ptxtSFJE="";
this->UpdateData(false);
// this->m_ptxtEndNo.Replace(str);
this->m_potxtSFJE.ReplaceSel(str);
}
}
UpdateData();
pos=m_ptxtSFJE.FindOneOf(".");
if (pos!=-1)
{
pos2=m_ptxtSFJE.Find(".",pos+1);
if (pos2!=-1)
{
this->m_ptxtSFJE.Delete(pos2);
str=this->m_ptxtSFJE;
this->m_ptxtSFJE="";
this->UpdateData(false);
// this->m_ptxtEndNo.Replace(str);
this->m_potxtSFJE.ReplaceSel(str);
}
}
在一个CEdit的输入框的OnUpdate事件中输入这些代码绝对不会出现1.2.3的情况.吐血贡献了.呵呵!~
{
boost::wregex reg(L"\\d*.?\\d*");
std::basic_string<wchar_t> str1=L"12.11";
std::basic_string<wchar_t> str1=L"1.2.3";
std::basic_string<wchar_t> result;
int b=result=boost::regex_match(ss,reg);
printf("%s",b?"true":"false");
b=result=boost::regex_match(ss,reg);
printf("%s",b?"true":"false");
}
catch(boost::bad_expression e)
{
printf("%s",e.what());
}
不知道行不行。
1.先把cstring1 转化为 数字i(atof());
2.再把数字i转化为cstring2,
3.比较cstring1,cstring2的长度,若相等则是一个数字。