我正在尝试将要从文件读取的字符串转换为小写,并将小写字符串保存在单独的字符串中以进行比较,但是我想保留原始字符串以进行演示,但遇到了一些麻烦:
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],但是将其全部保存在数组中似乎太多了。我这样做最有效吗?如何将小写字符串和原始字符串分开?
最佳答案
对于lowerStr[i]
的任何值,不能保证0
永远是i
。
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);
附言我无法为您测试此修复程序,因为您没有提供完整的测试用例。如果有,我会的。