我只是想尝试使用字母来尝试制作单词/名字。当我这样做时,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;
}
答案 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, ' ')
- 操作将不必发生。