что делает левый оператор сдвига при преобразовании целого числа в строку в переполнении стека

Предположим, вы хотите преобразовать целое число в строку, это метод в C ++

    int c1=999;
stringstream ss;
ss<<c1;
string str=ss.str();

Как это преобразовать в строку в C ++? Что содержит stringstream и в 3-й строке вышеуказанной программы
в этом утверждении, т.е. я имею в виду то, что оператор левого смещения (как мы знаем, что символ<<‘используется для сдвига влево) делает здесь для преобразования в строку

0

Решение

Чтобы преобразовать int в строку (очень просто), вам нужно пройти через все цифры, перевести его в обычный символ и поместить в строку:

int toConvert = 999;
string res = "";

while (toConvert)
{
int lastDigit = toConvert % 10; //retrieve last digit
char c = lastDigit + '0';       //translate it to the char corresponding
string reverse(c);      //We have to add it in front of the string, or otherwise
reverse.append (res);   // the digits will be reversed.
res = reverse;
toConvert /= 10;
}

Это очень простой способ перевода int в строку, и я уверен, что в операторе это сделано намного лучше «<<«, Но ты получил идею.

1

Другие решения

Сдвиг влево здесь — перегрузка функцией добавления, думайте об этом как
ss.append (c1) где приложение может иметь несколько функций
добавить (Int I)
добавить (строка s)
добавить (байт б)
так далее

каждая функция выполняет фактический перевод в нужную строку и добавляет ее …

1

В вашем коде нет оператора сдвига влево. В С, << был сдвиг влево. В C ++ это оператор вставки потока (также с поддержкой сдвига влево, по соображениям совместимости с C).

0

Вам разрешено перегружать различные операторы в C ++, включая битовое смещение влево <<, Концептуально вы можете переопределить это делать что угодно; единственное ограничение заключается в том, что количество операндов не может быть изменено.

Потоковые классы в потоковых библиотеках ввода-вывода C ++ используют это. Это синтетически мило в использовании << записывать аргумент в поток каким-либо образом, как, очевидно, побитовое смещение потока не имеет смысла, так что оператор также может быть использован для выполнения чего-то еще. Что это ss<<c1; делается. Это не делает ничего похожего на побитовый сдвиг.

Существует школа мысли, которая говорит, что перегрузка оператора сбивает с толку (возможно, именно поэтому этот вопрос был задан). Вот почему перегрузка операторов не попала в Java.

0

<< в этой ситуации не совсем левый оператор сдвига.

Это оператор потока.

Это присоединяет (вставляет) символы в ваш поток строк.

0
По вопросам рекламы [email protected]