为什么我不能将string :: back分配给string?

时间:2018-10-20 19:10:40

标签: c++ string c++11

我写了一个简单的程序: 获取字符串1的最后一个字符,并将其分配给字符串2。 就像:

 .input:focus {
  border-bottom: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}

但是,出现编译错误:

#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;
}

我不知道此错误的确切含义。 似乎发生了一些类型转换错误。 但是string :: back的返回值应该是char,对吧?

为什么我不能将其分配给另一个字符串? 以及如何将s1的最后一个字符赋予s2?

3 个答案:

答案 0 :(得分:9)

这是因为std::string没有仅包含单个字符参数的隐式constructor,这就是为什么从charstd::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()};

答案 1 :(得分:1)

字符串是字符集合,字符串的后面是字符(即只是集合的一个元素),而不是字符串。

您可以通过使用std::string的以下构造函数重载来实现所需的目标:

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

也就是说,将s2构造为一个单字符长度的字符串,其值为s1.back()

答案 2 :(得分:-1)

希望您正在尝试从字符串s1的最后一个字符中创建一个新的字符串s2。 您可以使用以下解决方案实现这一目标:

#include<iostream>
#include<string>
int main()
{
    std::string s1 = "abc!";
    std::string s2;
    s2 = s1.back();
    std::cout << s1;
    std::cout << s2;
    return 0;
}