为什么我不能将字符串::赋回字符串?
Why I can't assign string::back to string?
我写一个简单的程序: 获取字符串 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?
这是因为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()};
字符串是字符的集合,字符串的背面是一个字符(即,只是集合的一个元素(,而不是字符串。
您可以使用以下构造函数重载来实现所需的std::string
:
std::string s2(1, s1.back());
也就是说,将s2
构造为一个字符长度的字符串,值为s1.back()
。
希望您正在尝试从字符串 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;
}
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 为什么我不能将字符串::赋回字符串?
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 为什么我的字符串变量没有打印完整的字符串?
- 为什么我的子类不继承父类的字符串?
- C++字符串大小减去整数不是预期值,为什么?
- 为什么我的 cout 在输出中没有显示字符串?
- 为什么在为其分配编号后无法显示我的字符串值?
- 为什么没有访问所有字符串字符?
- 为什么可以将整数分配给字符串变量?
- C++子字符串为什么这样做
- 我的课堂上不能有字符串.为什么
- C++字符串为什么不能用作字符数组
- C++字符串流:接受字符串,但不接受存储在变量中的字符串.为什么?
- 反向字符串:为什么会崩溃
- 溢出字符数组每次都覆盖完全相同的字符串-为什么?