我正在尝试将要从文件读取的字符串转换为小写,并将小写字符串保存在单独的字符串中以进行比较,但是我想保留原始字符串以进行演示,但遇到了一些麻烦:

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);

附言我无法为您测试此修复程序,因为您没有提供完整的测试用例。如果有,我会的。

08-24 13:01