如何获取字符并将其转换为字符串?C++

How do I take a characters and turn it into a string? C++

本文关键字:转换 字符串 C++ 何获取 获取 字符      更新时间:2023-10-16

我只是想用字母表来尝试制作单词/名字。当我这样做时,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;
}

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

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

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

或者,+=运算符也可以工作:

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

此外,我建议在字符串中使用下标运算符 ([].at(),因为.at()会为您进行边界检查(这将使这个问题更加明显)。

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

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

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

有两种主要方法可以克服这个问题:

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

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