2013-02-13 63 views
3

我有一個小問題從Java代碼轉換到C++檢查是否字符是空

我想檢查是否二維陣列設置,這是我的java代碼

for(int area_y = y -1 ;area_y > 0 ;area_y--) 
    { 
     for(int area_x = 0 ;area_x < x; area_x++) 
     { 
      if(area[area_x][area_y] == 0) 
      { 
       System.out.print(" "); // this is printed 
             // if area[area_x][area_y] is not set 

      } 
      else 
      System.out.print(area[area_x][area_y]); 


     } 
      System.out.println(); 
    } 

,這是我的C++代碼來完成這項工程

for(int area_y = y -1 ;area_y > 0 ;area_y--) 
{ 
    for(int area_x = 0 ;area_x < x; area_x++) 
    { 
     if(area[area_x][area_y] == 0) // this line does not work as 
             // the next line is not executed 
     { 
      cout << "1"; 
     } 
     else 
     cout << (area[area_x][area_y]) ;     
    } 

cout << endl; 
} 

的問題是如果varaible設置檢查,它是一個char area[20][50];

如何在C++中正確地檢查變量是否爲空(未設置)?

+2

你能定義一個變量爲「空」的含義嗎? – 2013-02-13 22:30:28

+0

這些聲明中的字符未初始化。你可以將它們設置爲0. – chris 2013-02-13 22:30:37

+0

嘗試將char數組聲明爲全局或者用'0'作爲初始化來填充它 – ogzd 2013-02-13 22:30:48

回答

5

在C++中,標量類型的對象不是零初始化的。它們是默認初始化的,這意味着它們在初始化時獲得的值是未定義的。

尤其值得注意的是,對於char s,int等,這個值不大可能是0,並且絕對不應該依賴它來具有任何特定的值。如果您希望在開始使用它們之前將數組單元初始化爲0,則必須手動初始化它們。

如果您來自Java世界,您可能認爲這是一項不必要的工作,但考慮到您正在使用C風格的數組,並且C並不意味着犧牲程序員時間的性能。有些情況下,初始化爲0將無用地浪費CPU時間,並且您不想爲未使用的內容付費。

+0

+1來指出Java的性能問題 – LegendaryLaggy 2013-02-13 22:52:20

3

沒有辦法檢查變量是否已經「設置」。你只能檢查它是否等於一個特定的值。

你在java中的代碼似乎工作,因爲在Java中,所有被創建但未初始化的基本數據類型都被編譯器賦予默認值。在字符的情況下,它是'\ u0000',相當於0.

在C++中,這些字符的值是未定義的。如果你想要有相同的行爲,在做檢查之前,你需要明確地將所有的字符設置爲0。