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]ん。0i

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

追伸 完全なテストケースを提供しなかったため、この修正をテストすることはできません。もしあなたが持っていたら、私は持っているでしょう。

于 2012-04-10T20:16:22.983 に答える