2015-10-06 38 views
0

我做了以下內容:初始化和重新分配字符串

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

和我調動到strarr線得到了表達語法錯誤。

任何想法爲什麼?

我可以爲初始化做什麼,而不是:

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

我使用Borland C++ Builder的6

+0

您可以一次只設置一次數組(作爲聲明+定義它)!如果您需要使用不同的初始化配置,您可以使用#define #ifndef,#ifdef,#endif' pragmas,但不能將變量值用作條件。如果您需要在運行時更改數組的值,則需要逐個執行...如果字符串未更改,則可以使用指向不同的常量數組的指針 – Spektre

回答

1

據我所知,大括號語法僅用於初始化數組時,用於每個C++編譯器。因此您不能將其用於重新分配。您可以使用循環或逐個元素的賦值。

如果要分配的值的數量是恆定的,並且它們的值是常量,則可以將它們置於一個常數數組中,並遍歷它以填充starr []數組。

0

我得到了重新分配的線表達式語法錯誤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];