【问题标题】:Init and use C++ std::string as array of char初始化并使用 C++ std::string 作为 char 数组
【发布时间】:2017-04-11 23:31:58
【问题描述】:

我想使用 std::string 进行动态字符串处理。数据被追加并追加到一个字符串,有时我不想为索引 i 处的字符设置值。我不知道要在字符串中添加多少个字符。 .NET 中的动态集合之类的东西。 当我在 C++ 中分配一个 std::string 时

std::string s;

并尝试为其设置索引 i 处的元素:

s[0] = 'a';

它将通过与内存有关的错误。 一种愚蠢的方法是使用现有数据对其进行初始化并稍后替换它们:

std::string s = generate1000chars();
s[2] = 'c';

有没有办法初始化一个允许在索引 i 处操作字符的字符串,比如 char 数组?

【问题讨论】:

  • 你应该resize使用前的字符串。
  • 如果你想附加一些字符,也可以看看push_backoperator+=
  • 我的意思是std::string s(1000, 'a');here 的第二个构造函数。当然,它应该比调整大小要慢。
  • 谢谢。现在我正在使用一个while循环,有一个全局totalSize值,只需增加它并调整大小:)这最适合在索引处分配值。

标签: c++ arrays stdstring setvalue


【解决方案1】:

您可以使用std::string::resize()调整大小,稍后再填写:

std::string s;
s.resize(1000);

//later..
s[2] = 'c';

【讨论】:

    【解决方案2】:

    也许你可以尝试像这样的包装函数

    std::string& SetChar(std::string& str, char ch, size_t index)
    {
        if (str.length() <= index)
        {
            str.resize(index + 1);
        }
        str[index] = ch;
        return str;
    }
    

    这样字符串可以在需要时自动扩展。 (修改为更好的签名)

    【讨论】:

    • 我们在这里甚至有一个很好的解决方案。谢谢你
    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 2010-09-26
    • 2013-09-12
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多