将字符串内的字符更改为数字

时间:2016-04-14 16:16:00

标签: c++ visual-studio

我有一个字符串a =" Hello world!",现在为了好玩,我希望将字符串a中的第一个字母更改为我选择的数字。例如

string a = "Hello world!";
int x;
std:cin>>x;
a[0] = x;
cout << a;

现在我想要它生产的是&#34; xello世界!&#34; x是我输入的数字,但我得到一个笑脸。

有人看过类似的东西,知道如​​何解决它吗?

另外:为什么你甚至可以访问像这个字符串[]的字符串?它不是一个char数组o.o

3 个答案:

答案 0 :(得分:5)

如果x是一位数字,请改为:

a[0] = x + '0';

修改

为什么会这样做

string中的每个元素都是charcharinteger表示。您可以在ASCII table中查看此内容。例如,integer 48代表char '0'integer 49代表char '1'等。因此,通过将integer x添加到char '0',您可以获得你想要的数字'x'

为什么它可能有危险

我能想到的一个原因是在空字符串中写入未分配的内存时,可能会调用未定义的行为。

然后,您可以使用string::empty()检查字符串是否为空。在这种情况下,

if (!a.empty()) {...}

答案 1 :(得分:3)

使用string::replacestd::to_string,无论x是单个还是多个数字,这都会有效:

string a = "Hello world!";
int x;
std:cin>>x;
a.replace(0, 1, std::to_string(x));

Live Example

答案 2 :(得分:0)

作为一个额外的答案,你可以在try块中使用at()方法,因为它正在执行边界检查,如果访问无效,则抛出std::out_of_range类型的异常:

如果您添加x + '0'x高于9,则无法为您提供数字。
请查看ascii table

int main()
{
    std::string a { "Hello World" };
    int x {};
    std::cin >> x;
    try {
        a.at(0) = '0' + x;      // OOPS: '0' + 10 will give you ':'
        std::cout << a << '\n';
    }
    catch(std::out_of_range& e) {
        std::cout << e.what();
    }
}

更好的解决方案是@PaulMcKenzie回答,使用std::to_stringstring::replace