在c++中如何从另一个字符串赋值未初始化的字符串值
how to assign uninitialized string value from another string in C++
我对编程很陌生。我的问题可能很傻,但如果有人能指导我,那将是有帮助的。
请参阅下面我的代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "you have choose to Reverse the text" << endl;
string inputstring;
string outputstring;
cout << "Enter the string you want to reverse" << endl;
getline(cin, inputstring);
int n = inputstring.length();
for (int i = 0; i < n; i++)
{
outputstring[i] = inputstring[n - 1 - i]; // problem in this line
}
}
直到这里它工作良好的inputstring[n - 1 - i]
,但当我试图将其值分配给outputstring
。
outputstring
是空的,所以你在越界访问它:
outputstring[i] = inputstring[n - 1 - i];
您必须确保在进入循环时outputstring
的长度至少为n
。有不同的方法可以达到这个目的。
inputstring
后创建大小为n
的。这里,我们用*
:
填充它std::string outputstring(n, '*');
你也可以在创建后调整字符串的大小:
outputstring.resize(n);
现在您可以访问N
在[0, n)
范围内的outputstring[N]
。这使得循环有效。请看这个工作示例。
或者,您可以考虑就地反转inputstring
。请注意,在实际代码中,可以使用std::reverse
:
std::reverse(inputstring.begin(), inputstring.end());
使用std::string
的assign
成员函数
outputstring.assign(inputstring);
或者你可以更简单地使用它的operator =
,比如
outputstring = inputstring;
或者,如果你只想分配字符串的部分,你可以插入、替换、追加和使用resize来调整字符串
的大小作为一个经验法则,总是阅读与你正在使用的任何c++特性相关的文档,所以如果你使用std::string
,你必须在开始编码之前阅读它的文档(以便能够为工作选择正确的函数)
在输入任何c++代码之前,阅读一本关于c++编程的好书的前几章将会非常有帮助。
当然要学习c++ 11或c++ 14,而不是一些旧版本的标准
outputstring为空。因此,在访问它的第i个元素时,程序会导致未定义的行为(链接,异常安全节)。修改最后几行
for (int i = 0; i < n; i++)
{
outputstring[i] = inputstring[n - 1 - i]; // problem in this line
}
outputstring.reserve(n); // reserve is optional. Use it just for memory allocating optimization..
for (int i = 0; i < n; i++)
{
outputstring += inputstring[n - 1 - i]; // problem in this line
}
操作符+=在初始字符串后追加字符或字符串。
相关文章:
- 如何使用向量为字符串赋值
- 避免在 ctor 初始值设定项列表中的字符串赋值中使用双重调用函数
- 无法为字符串赋值(Eclipse CDT、MinGW、C++)
- 带有初始值设定项列表的字符串赋值
- R 值重载运算符字符串赋值错误
- 使用for循环的C字符串赋值
- 正在将std::string中的子字符串赋值为c样式字符串
- 字符串赋值中的代码转储
- 当我们可以使用=运算符为字符串赋值时,为什么要在赋值之前使用new运算符为字符串动态分配内存
- 析构函数忽略字符串赋值
- 如果右手边包含字符串文字的串联,则C++const std::字符串赋值错误
- 在c++中如何从另一个字符串赋值未初始化的字符串值
- 字符串赋值错误
- 蠢Q:将字符串赋值到字符数组中
- 如何将字符串赋值为十六进制
- 字符串赋值差异
- std::通过索引进行字符串赋值似乎不起作用
- 当常量字符串赋值给常量字符指针时会发生什么?
- 字符串赋值中的Coredump
- 这里面有什么错误?字符串赋值