1

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

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] ,但是将它全部保存在一个数组中似乎太多了。我这样做是最有效的吗?如何将我的小写字符串和原始字符串分开?

4

1 回答 1

3

无法保证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]);

或者,正如奥利建议的那样:

std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower);

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

于 2012-04-10T20:16:22.983 回答