Разделение строки на массив символов с использованием переменной для строки - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь разбить строку на массив отдельных символов.Тем не менее, я хотел бы, чтобы строка была введена пользователем, для которого мне нужно определить строку, используя переменную.

Мой вопрос: почему это работает:

#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 голосов
/ 20 декабря 2018

Во втором примере типом слова является std::string, и по умолчанию нет преобразования типов из std::string в тип char.

С другой стороны, первый пример работаетпотому что его можно интерпретировать как массив char (но на самом деле это просто c-стиль const char *).

Если по какой-то причине вы захотите преобразовать std::string в стиль cchar массив, вы можете попробовать что-то вроде этого ...

#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;
}
0 голосов
/ 20 декабря 2018

Ваш пример не работает, потому что вы пытаетесь поместить std::string в массив char.Компилятор будет жаловаться здесь, потому что std::string не имеет преобразования типа в char.

Поскольку вы просто пытаетесь напечатать первый символ строки, просто используйте перегрузку доступа к массиву std::string,std::string::operator[] вместо:

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