コンソールに何かを出力するのにstd::cout
を使用すると、やや奇妙な動作に気付きました。
私はstring& toUpper(std::string &str)
とstring& toLower(std::string &str)
という2つの関数を書いています。これらの関数は、後で呼び出されるものとまったく同じです。文字列をすべて大文字またはすべて小文字に変換します。奇妙な行為
#include <string>
using namespace std;
string& toLower(string &str)
{
for(char &c : str)
c = tolower(c);
return str;
}
string& toUpper(string &str)
{
for(auto &c : str)
c = toupper(c);
return str;
}
ここでは、両方の機能を独立してテストしましたが、期待通りに動作しています。私は出力が
hello world
HELLO WORLD
ことが期待
string str = "Hello World";
cout << toLower(str) << endl << toUpper(str) << endl;
ではなく、私はちょうど私がいるのでprintf
を使用して同じことをテストし
hello world
hello world
ました:それから私はcout
コールでそれらの両方をチェーンcout
のやり方に特有のものかもしれないと思ったが、私は同じ結果を得たので、自分のコードに何か問題があると思う。
私のコードの問題点は何ですか?
を参照するのではなく、コピーを返しますし、それは私がそのコピーが働くだろう知っているが、私は実際の文字列のインプレースを操作したい – OMGtechy
をうまくいきます。 – TorbenJ
同じ文字列を2回操作しています。 Coutはバッファリングされているので、私はそれが問題を引き起こしていると推測しています。 –