【问题标题】:initialize and reassignment for string in c++ borland builderc++ borland builder中字符串的初始化和重新分配
【发布时间】:2015-10-06 09:06:38
【问题描述】:

我正在做以下事情:

string strarr[]={"","",""};
if (a==b)
{
  strarr={"a","b","c"};
}
else
{
  strarr={"d","e","f"};
}

我在重新分配给 strarr 的行上遇到了表达式语法错误。

任何想法为什么?

我可以做些什么来初始化而不是:

string strarr[]={"","",""};

我正在使用 Borland C++Builder 6。

【问题讨论】:

  • 您可以一次设置数组一次(作为它的声明+定义)!如果您需要不同的初始化配置,您可以使用 #define #ifndef,#ifdef,#endif pragmas 但您不能使用变量值作为条件。如果您需要在运行时更改数组的值,则需要一一进行...如果字符串没有更改,则可以改用指向不同 const 数组的指针

标签: string initialization c++builder c++builder-6


【解决方案1】:

据我所知,大括号语法仅在初始化数组时用于每个 C++ 编译器。因此,您不能将其用于重新分配。您可以改用循环或逐元素赋值。

如果您要分配的值的数量是恒定的并且它们的值是恒定的,您可以将它们放在一个常量数组中并遍历它以填充您的 starr[] 数组。

【讨论】:

    【解决方案2】:

    我在重新分配给 strarr 的行上遇到表达式语法错误

    任何想法为什么?

    一旦数组初始化,您就无法重新分配数组本身。您只能重新分配其元素,例如:

    string strarr[]={"","",""};
    if (a==b)
    {
      strarr[0] = "a";
      strarr[1] = "b";
      strarr[2] = "c";
    }
    else
    {
      strarr[0] = "d";
      strarr[1] = "e";
      strarr[2] = "f";
    }
    

    我可以做些什么来初始化而不是:

    字符串 strarr[]={"","",""};

    std::string 有一个默认构造函数将其初始化为空值,因此根本不需要将其显式初始化为""。删除初始值,并指定数组的大小。让编译器为你调用构造函数:

    string strarr[3];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多