如何将角色转换成字符串? C ++

时间:2018-02-07 19:06:41

标签: c++

我只是想尝试使用字母来尝试制作单词/名字。当我这样做时,cout最终没有输出任何内容。

#include <iostream>
#include <ctime>
#include <string>
#include <stdlib.h>

using namespace std;
int main() {
    char Alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
    string n;

    n[0] = Alphabet[10];
    n[1] = alphabet[4];
    n[2] = alphabet[21];
    n[3] = alphabet[8];
    n[4] = alphabet[13];
    cout << n << endl;
}

3 个答案:

答案 0 :(得分:5)

您的问题是n是一个空字符串,这意味着您正在尝试访问不存在的索引。

要在字符串中添加字符,可以使用字符串成员函数push_back

n.push_back(Alphabet[10]);
n.push_back(alphabet[4]);
...

或者,the += operator也适用:

n += Alphabet[10];
n += alphabet[4];
...

此外,我建议对你的字符串使用.at()而不是下标运算符([]),因为.at()将为你做边界检查(这会使这个问题成为一个问题)更明显一点。)

答案 1 :(得分:0)

使用string n;创建字符串时,会创建一个空字符串。它的长度为零,因此尝试使用n[0]等访问字符串中的字符位置不起作用。这些根本就不存在。

如另一个答案中所述,您可以使用成员函数push_back将字符添加到字符串中,将其长度增加一个。

答案 2 :(得分:0)

当您将Bike定义为n时,string n;将是一个空字符串(零大小和未指定的容量),并且访问索引超出其大小的字符串是未定义的行为。

有两种主要方法可以解决这个问题:

(1)像n中一样使用运算符+=,这样字符串对象就会相应调整其大小。请注意,这可能会导致n += Alphabet[10]; - 不时在内部进行操作。

(2)如果你事先知道大小,realloc你可以预先留出足够的空间(在这种情况下用空格填充字符串),这样string n(5, ' ') - 操作将不必发生。