【发布时间】:2012-10-12 05:00:34
【问题描述】:
我正在编写一个将 wchar_t 数组转换为 long integer 值的函数(该函数忽略空格 beetwen 数字)。看我的代码:
long wchartol(wchar_t *strArray, long retVal = 0) {
wchar_t *firstArray = strArray;
long pow;
int count, i;
count = 0;
i = 0;
pow = 1;
while(*firstArray != L'\0') {
//firstArray++;
if(*firstArray++ == L' ')continue;
count++;
}
firstArray--;
while(i < count) {
if(*firstArray != L' ') {
retVal += (*firstArray - L'0') * pow;
pow*=10;
i++;
}
firstArray--;
}
return retVal;
}
我还有一个有趣的问题:当我从某个文件中复制数字数据(它包含空格)并将其粘贴到函数的参数中时,我得到了函数返回的错误数据;但是当我用键盘输入的空格替换这些空格时,一切都很好。什么原因?我这样调用函数:
std::wcout << wchartol(L"30 237 740") << std::endl;
读取使用outputstream.imbue(std::locale::global(std::locale(""))); 编写的文件也许就是这个原因?
【问题讨论】:
-
也许您输入的文件不包含宽字符。 (或者它会自动转换吗?我不这么认为......)请检查 wchartol("30 237 740") 是否返回相同的错误值,如果是这样,这显然是问题所在。此外,文件中的字符串可能包含换行符,当您遇到除空格以外的任何非数字字符时应停止处理(在 while(*firstArrax != L'\0') 行中)
-
您希望 L"30 237 740" 返回 30237740?