如何在C ++中为另一个字符串分配未初始化的字符串值

时间:2015-10-10 05:42:06

标签: 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时。我收到了错误。

3 个答案:

答案 0 :(得分:3)

outputstring为空,因此您可以在此处访问界限:

outputstring[i] = inputstring[n - 1 - i];

进入循环时,您必须确保outputstring的长度至少为n。有不同的方法来实现这一目标。

一种解决方案是在读入n后创建大小为inputstring 的文件。在这里,我们创建了*

std::string outputstring(n, '*');

您还可以在创建后调整字符串大小:

outputstring.resize(n);

现在,您可以在outputstring[N]范围内访问N的{​​{1}}。这使您的循环有效。请参阅this working example

或者,您可以考虑就地撤销[0, n)。请注意,在实际代码中,可以使用inputstring

轻松完成此操作
std::reverse

答案 1 :(得分:1)

您只需使用std::string

assign成员函数
 outputstring.assign(inputstring);

或者你甚至可以更简单地使用它的operator =

outputstring = inputstring;

或者,如果您只想分配字符串的部分,可以insertreplaceappend并使用resize调整字符串的大小

根据经验,请务必阅读与您正在使用的任何C ++功能相关的文档,因此如果您使用std::string,则必须在之前阅读its documentation >开始编码(能够为工作选择合适的功能)

在输入任何C ++代码之前,阅读C++ programming上一本好书的前几章将非常有帮助。

当然要学习C++11或C ++ 14,而不是标准的旧版本。

答案 2 :(得分:0)

outputstring 为空。因此,在访问其第i个元素时,您的程序会导致未定义的行为(link异常安全部分)。 只需更改最后一行

        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
        }

运算符+ = 将char或string附加到初始字符串。