Я заметил довольно странное поведение при использовании std::cout
для вывода чего-то на консоль.
Я написал две функции: string& toUpper(std::string &str)
и string& toLower(std::string &str)
, которые должны делать то, что они вызывают: конвертировать строку в верхнем и нижнем регистре.Weird cout поведение
#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;
}
Теперь я проверил обе функции самостоятельно и они работают должным образом. Тогда я прикован их обоих в cout
вызова:
string str = "Hello World";
cout << toLower(str) << endl << toUpper(str) << endl;
Я ожидал, что выход будет
hello world
HELLO WORLD
, но вместо этого я только что получил
hello world
hello world
Я испытал то же самое, используя printf
, потому что Я думал, что это может быть что-то особенное для того, чтобы делать вещи, но я получил тот же результат, поэтому, я думаю, у меня что-то не так с моим кодом.
В чем проблема с моим кодом?
Верните копию вместо ссылки, и она будет работать – OMGtechy
Я знаю, что копирование будет работать, но я хочу управлять фактической строкой на месте. – TorbenJ
Ну, вы дважды управляете одной строкой. Cout буферизуется, поэтому я предполагаю, что это вызывает проблему. –