使用字符串变量将字符串拆分为字符数组

时间:2018-12-20 03:08:37

标签: c++ parsing split

我正在尝试将字符串分成单个字符的数组。但是,我希望用户输入字符串,为此我需要使用变量定义字符串。

我的问题是,为什么要这样做:

#include <iostream>
using namespace std;
int main() {
char arr [] = {"Giraffe"};
cout << arr[0];
    return 0;
}

但这不是吗?

#include <iostream>
using namespace std;
int main() {
string word;
word = "Giraffe";
char arr [] = {word};
cout << arr[0];
    return 0;
}

谢谢

2 个答案:

答案 0 :(得分:0)

您的示例不起作用,因为您尝试将std::string放入char数组中。编译器会在这里抱怨,因为std::string没有类型转换为char

由于您只是尝试打印字符串的第一个字符,因此只需使用std::stringstd::string::operator[]的数组访问器重载即可:

std::string word;
word = "Giraffe";
std::cout << word[0] << std::endl;

答案 1 :(得分:0)

在第二个示例中,单词的类型为std::string,并且没有从std::string到类型char的默认类型转换。

另一方面,第一个示例之所以有效,是因为它可以解释为char的数组(但实际上只是c样式的const char *)。

如果由于某种原因,您想将std::string转换为c样式的char数组,那么您可能想尝试这样的方法...

#include <iostream>
#include <string>
#include <cstring>

int main(void) 
{
    std::string word;
    word = "Giraffe";
    char* arr = new char[word.length() + 1];     // accounting for the null-terminating character
    strcpy(arr, word.data());
    std::cout << arr[0] << std::endl;
    delete[] arr;                                // deallocating our heap memory
    return 0;
}