问个字符转数字的简单小问题 请问下那位知道VC里面的什么字符转换方法支持错误的检查,比如1.1可以转,A1.1或者1.1A这样的错误格式不能转或者抛出异常,目前试过了wtoi,swscanf都不行,能转换但是不能告诉我格式不合要求 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比较笨的方法:BOOL IsNumeric(CString strData,BOOL bIsFloat){ int iDots = 0; int iNegatives = 0; strData.TrimRight(); strData.TrimLeft(); for(int i = 0;i < strData.GetLength();i++) { if(strData.GetAt(i) == '-') { iNegatives ++; continue; } if(strData.GetAt(i) == '.') { if(bIsFloat == FALSE) return FALSE; iDots++; if(iDots >= 2) return FALSE; continue; } if((strData.GetAt(i)<'0')||(strData.GetAt(i)>'9')) return FALSE; } if(iNegatives >= 2) return FALSE; return TRUE;} 貌似没有,自己写个函数,CString中有一个函数:SpanExcluding 它能提取字符串中不包含你指定的字符,执行它之后判断该操作什么就是了。CString str="A0.1";CString tem=str.SpanExcluding("0123456789.");if(tem==""){ atoi(str);..........} 其实你说的这些函数都支持错误检测,调用之后看一下errno就是了。 先检测格式,有没有其他字符什么的,然后在转换。或者直接分离2边的字符 char* str = "A1.1"; char temp1[20]; char temp2[20]; int a; int b; sscanf(str, "%[^0-9]%d.%d%[^0-9]", temp1, &a, &b, temp2); int i = 10; while (b / i) { i *= 10; } float c = a + (float)b / i; 介绍你两个函数 问题就应该能解决CString::SpanIncludingCString SpanIncluding( LPCTSTR lpszCharSet ) const; throw( CMemoryException );/*返回值:返回此字符串中的一个子字符串,该子串中的字符也在lpszCharSet字符集中字符集中。该子串开始于字符串中的第一个字符,当发现第一个不是lpszCharSet字符集中的字符时结束。如果字符串中的第一个字符就不是指定字符集中的字符,则SpanIncluding返回一个空的子字符串。参数: lpszCharSet 一个被解释为字符集的字符串。 说明:此成员函数用来从字符串中提取字符,提取的子字符串开始于字符串中的第一个字符,其字符都是由lpszCharSet指定的字符集中的。如果字符串的第一个字符就不在此字符集中,则SpanIncluding返回一个空的字符串。否则,它返回一个连续字符序列,它们都是该字符集中的字符。示例:下面的例子说明了如何使用CString::SpanIncluding。*/// CString::SpanIncluding示例:CString str( "cabbage" );CString res = str.SpanIncluding( "abc" );ASSERT( res == "cabba" );res = str.SpanIncluding( "xyz" );ASSERT( res.IsEmpty( ) );////////////////////////////////////////////////////////////////////////////////////CString::SpanExcludingCString SpanExcluding( LPCTSTR lpszCharSet ) const; throw( CMemoryException );/* 说明部分返回值:返回一个子字符串,该子串保存了在CString字符串中但又不在lpszCharSet字符集合中的字符,该子串以字符串的第一个字符作为开始,以在此字符串中发现的第一个也在lpszCharSet字符集中字符前面的字符作为结尾(也就是说,从此字符串的第一个字符开始,直到第一个也包括在lpszCharSet字符集的字符为止,但不包括这个也在lpszCharSet字符集中的字符)。如果CString中的每一个字符都不在lpszCharSet字符集合中,则返回整个字符串。参数: lpszCharSet 一个被解释为字符集的字符串。 说明:此成员函数用来查找整个CString对象中的字符串,找出lpszCharSet指定的字符集中任何字符第一次出现的位置。SpanExcluding提取并返回这个lpszCharSet字符集中的字符第一次出现之前的所有字符(换句话说,来自lpszCharSet字符集的字符以及在它之后的字符串都不会被返回)。如果在此字符串中没有发现来自lpszCharSet字符集的字符,则SpanExcluding返回整个字符串。示例:下面的函数返回src参数的第一个部分。*/// 由一个分号(;),一个逗号( , ),一个句号( . ),一个破折号( - ),// 或一个冒号( : )划定界线的部分。CString GetFirstPart( CString src){ return src.SpanExcluding( ";,.- :");}用这两个函数测试一下 发现有分数字字符 可以自己学个抛出异常 没有异常就用watoi,_atoi,atoi,_ttoi等等自己查个合适的 转换函数 请问如何实现背景透明的CEdit 实际亮度值转化为灰度值,有什么算法? 在剪贴板里拷贝了一个文件,如何将该文件粘贴到一个指定目录内? 升了一角,惭愧 HOOK 问题!!!! 急急急! 加入软件开发交流群,QQ群号为1307512!!! 如何实现文本的自动换行? 怎么把内存位图开得很大? 快来看看,AI题,C++实现,请教思路,有没有不用一堆for()的代码,有类似的程序代码也好!给分! 我怎么实现 在一个特定的时间在一个特定的控件(比如一个BUTTON)上弹出一个tips,而不需要我的鼠标移动到那个控件上面去呢! 急搜vc++编写的多媒体播放器 关于CLIST
BOOL IsNumeric(CString strData,BOOL bIsFloat)
{
int iDots = 0;
int iNegatives = 0; strData.TrimRight();
strData.TrimLeft(); for(int i = 0;i < strData.GetLength();i++)
{
if(strData.GetAt(i) == '-')
{
iNegatives ++;
continue;
}
if(strData.GetAt(i) == '.')
{
if(bIsFloat == FALSE) return FALSE;
iDots++;
if(iDots >= 2) return FALSE; continue;
}
if((strData.GetAt(i)<'0')||(strData.GetAt(i)>'9'))
return FALSE;
}
if(iNegatives >= 2) return FALSE;
return TRUE;
}
if(tem==""){
atoi(str);
..........
}
char* str = "A1.1";
char temp1[20];
char temp2[20];
int a;
int b;
sscanf(str, "%[^0-9]%d.%d%[^0-9]", temp1, &a, &b, temp2); int i = 10;
while (b / i)
{
i *= 10;
} float c = a + (float)b / i;
throw( CMemoryException );
/*
返回值:
返回此字符串中的一个子字符串,该子串中的字符也在lpszCharSet字符集中字符集中。该子串开始于字符串中的第一个字符,当发现第一个不是lpszCharSet字符集中的字符时结束。如果字符串中的第一个字符就不是指定字符集中的字符,则SpanIncluding返回一个空的子字符串。参数: lpszCharSet 一个被解释为字符集的字符串。 说明:
此成员函数用来从字符串中提取字符,提取的子字符串开始于字符串中的第一个字符,其字符都是由lpszCharSet指定的字符集中的。如果字符串的第一个字符就不在此字符集中,则SpanIncluding返回一个空的字符串。否则,它返回一个连续字符序列,它们都是该字符集中的字符。示例:
下面的例子说明了如何使用CString::SpanIncluding。
*/
// CString::SpanIncluding示例:
CString str( "cabbage" );
CString res = str.SpanIncluding( "abc" );
ASSERT( res == "cabba" );
res = str.SpanIncluding( "xyz" );
ASSERT( res.IsEmpty( ) );
////////////////////////////////////////////////////////////////////////////////////
CString::SpanExcludingCString SpanExcluding( LPCTSTR lpszCharSet ) const;
throw( CMemoryException );
/* 说明部分
返回值:
返回一个子字符串,该子串保存了在CString字符串中但又不在lpszCharSet字符集合中的字符,该子串以字符串的第一个字符作为开始,以在此字符串中发现的第一个也在lpszCharSet字符集中字符前面的字符作为结尾(也就是说,从此字符串的第一个字符开始,直到第一个也包括在lpszCharSet字符集的字符为止,但不包括这个也在lpszCharSet字符集中的字符)。如果CString中的每一个字符都不在lpszCharSet字符集合中,则返回整个字符串。参数: lpszCharSet 一个被解释为字符集的字符串。 说明:
此成员函数用来查找整个CString对象中的字符串,找出lpszCharSet指定的字符集中任何字符第一次出现的位置。SpanExcluding提取并返回这个lpszCharSet字符集中的字符第一次出现之前的所有字符(换句话说,来自lpszCharSet字符集的字符以及在它之后的字符串都不会被返回)。如果在此字符串中没有发现来自lpszCharSet字符集的字符,则SpanExcluding返回整个字符串。示例:
下面的函数返回src参数的第一个部分。
*/
// 由一个分号(;),一个逗号( , ),一个句号( . ),一个破折号( - ),
// 或一个冒号( : )划定界线的部分。
CString GetFirstPart( CString src)
{
return src.SpanExcluding( ";,.- :");
}用这两个函数测试一下 发现有分数字字符 可以自己学个抛出异常 没有异常就用watoi,_atoi,atoi,_ttoi等等自己查个合适的 转换函数