Присвойте значение определенному индексу std :: string - PullRequest
0 голосов
/ 11 июля 2020
#include <iostream>
#include <string>
using namespace std;   
int main()
{
    string x("5");
    int y = 3;
    x[0] = char(y);
    cout << x;
    return 0;
}

В этом примере кода: я попытался преобразовать целое число y и назначить его первому символу строки x , я ожидал увидеть значение '3' внутри строки, но я получаю другое значение. как лучше всего присвоить целочисленное значение индексу строки?

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Кажется, вы путаете di git «3» и число 3.

Когда вы устанавливаете y равным трем, вы устанавливаете его равным числу три, числу, которое в двоичном формате "11", то есть на единицу больше двух. Это число представлено как «3» в базе 10, но это только один из способов его представления. Вы можете представить его как «III» или «один больше, чем два», если хотите. Это по-прежнему значение 3.

Когда вы выполняете cout << x; для вывода символа, он не выводит символ с основанием десять. Что бы это вообще значило? Таким образом, нет причин ожидать представления числа три в базе десять, когда вы это сделаете.

Я ожидал увидеть значение «3» внутри строки, но я получил другое значение.

Ваше ожидание необоснованно. Нет никакой связи между выводом символов и тем, как числовые значения представлены в десятичной системе.

Вы действительно получили некоторое представление значения три. Только не di git, которое мы используем для представления значения три в базе 10. Но, опять же, почему вывод символа имеет какое-либо отношение к представлению значений в базе десять? Это процедура вывода символов, а не числовая. Он не пытается представить числовые значения в конкретных числовых базах.

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

Например, если мы преобразуем число сто в строку, у нас будет переменная значение которой состоит из любых значений, которые система использует для представления цифр «1», «0», «0» в этой последовательности, за которой, вероятно, следует что-то, указывающее на конец строки. Скорее всего, в вашей системе будет сорок девять, сорок восемь, сорок восемь, ноль.

1 голос
/ 11 июля 2020

Это:

x[0] = char(y);

Означает «взять целое число y (равное 3) и сохранить его как первый байт строки x».

Проблема в том, что целое число 3 - это не символ «3». Посмотрите на таблицу ASCII: http://www.asciitable.com/ и увидите, что символ «3» на самом деле является целым числом 51. Таким образом, вам нужно либо изменить y на 51, либо изменить свое присвоение, чтобы преобразовать любое целое число. 0-9, как это:

x[0] = '0' + y;

Это работает, пока y находится между 0 и 9, потому что умные дизайнеры ASCII сделали эти символы последовательными.

...