[英]Convert to Lower and Hold in Str - C++
我正在尝试将我正在从文件中读取的字符串转换为小写并将小写字符串保存在单独的字符串中以进行比较,但我想保留原始字符串以供演示,但我遇到了一些麻烦:
ifstream file;
string name,
lnStr,
searchStr,
lowerStr;
int lineNum = 0;
int strCount;
while(getline(file, lnStr))
{
lowerStr = lnStr;
for(int i = 0; lowerStr[i] != '\0'; i++){
lowerStr[i] = tolower(lowerStr[i]);
}
if(lowerStr.find(searchStr, 0) < lnStr.npos)
{
cout << setw(5) << ++lineNum << ":" << lnStr << endl;
strCount++;
}
}
显然我不能在字符串上使用 sub[i],但将它全部保存在一个数组中似乎太多了。 我这样做效率最高吗? 如何将小写字符串和原始字符串分开?
对于 i 的任何值,无法保证lowerStr[i]
i
为0
。
for(int i = 0; lowerStr[i] != '\0'; i++){
lowerStr[i] = tolower(lowerStr[i]);
}
试试这个:
// UNTESTED
for(int i = 0; i < lowerStr.size(); i++)
lowerStr[i] = tolower(lowerStr[i]);
或者,正如 Oli 所建议的那样:
std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower);
附言。 我无法为您测试此修复程序,因为您没有提供完整的测试用例。 如果你有,我就会有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.