我写了一个简单的程序: 获取字符串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?
答案 0 :(得分:9)
这是因为std::string
没有仅包含单个字符参数的隐式constructor,这就是为什么从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()};
答案 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;
}