Почему я не могу присвоить строку :: обратно в строку? - PullRequest
0 голосов
/ 20 октября 2018

Я пишу простую программу: получить последний символ строки1 и присвоить его строке2.Это как:

#include<iostream>
#include<string>

int main(int argc, char const *argv[])
{
    std::string s1 = "abc!";
    std::string s2 = s1.back();
    std::cout << s1;
    return 0;
}

Тем не менее, я получаю ошибку компиляции:

conversion from ‘__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type {aka char}’ to non-scalar type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ requested

Я не знаю, что эта ошибка точно означает.Кажется, что произошла ошибка преобразования типа.Но возвращаемое значение string :: back должно быть char, верно?

Почему я не могу присвоить его другой строке?И как я могу дать последний символ s1 для s2?

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Строка - это набор символов , задняя часть строки - это символ (т. Е. Просто элемент коллекции), а не строка.

Вы можете достичь желаемого, используя следующую перегрузку конструктора std::string:

std::string s2(1, s1.back());

То есть, построить s2 как строку длиной в один символ со значением s1.back().

0 голосов
/ 20 октября 2018

Надеюсь, вы пытаетесь создать новую строку s2 из последнего символа строки s1.Вы можете добиться этого, используя решение ниже:

#include<iostream>
#include<string>
int main()
{
    std::string s1 = "abc!";
    std::string s2;
    s2 = s1.back();
    std::cout << s1;
    std::cout << s2;
    return 0;
}
0 голосов
/ 20 октября 2018

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

// 1. Constructor with length + char
std::string s2(1, s1.back());

// 2. Constructor which takes an std::initializer_list<char>
std::string s2{s1.back()};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...