2016-09-28 4 views
-1

これは、最長回文サブストリングを見つけるためにCodeLeetからの問題の声明でした。なぜVisual Studioは配列サイズの変数をサポートしていませんか?

class Solution { 
public: 
string longestPalindrome(string s) { 
    int len = s.size(); 
     int P[len][len]; 
memset(P, 0, len*len*sizeof(int)); 
     int maxL=0, start=0, end=0; 
     for(int i =0; i< s.size(); i++){ 
      for(int j =0; j<i; j++){ 
        P[j][i] = (s[j] == s[i] && (i-j<2 || P[j+1][i-1])); 
        if(P[j][i] && maxL < (i-j+1)) 
        { 
         maxL = i-j+1; 
         start = j; 
         end = i; 
        } 
      } 
      P[i][i] =1; 
     } 
     return s.substr(start, end-start +1); 
    } 
}; 

しかし、Visual Studioでの関数と同じことを書く:このソリューションが動作するcodeleetインターフェイスで

string User::longestPalindromeStr(string s) { 
int len = s.size(); 
int P[len][len]; 
memset(P, 0, len*len * sizeof(int)); 
int maxL = 0, start = 0, end = 0; 
for (int i = 0; i< s.size(); i++) 
{ 
    for (int j = 0; j<i; j++) 
    { 
     P[j][i] = (s[j] == s[i] && (i - j<2 || P[j + 1][i - 1])); 
     if (P[j][i] && maxL < (i - j + 1)) 
     { 
      maxL = i - j + 1; 
      start = j; 
      end = i; 
     } 
    } 
    P[i][i] = 1; 
} 
return s.substr(start, end - start + 1); 
} 

それがlen変数のために言う:式が持っている必要があります一定の値?それはVIsualスタジオideといくつかの問題ですか?これをどうすれば解決できますか?

+0

[可変長配列のC++で可能な複製](http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c) –

答えて

2

可変長配列(変数constexprを使用する配列宣言)はC99機能であり、ではなく、のC++機能です。 C++のバージョンは提供されておらず、Visual Studioの特定のC99機能は提供されていません。

あなたのコードが他のC++コンパイラでコンパイルされた場合、そのコードはC++標準の上に提供されるC++言語拡張のためです。

0

VSコンパイラに問題はありません。 C++では、new int[]を使用して、実行時定義の長さの1次元配列を作成できますが、new int[][]は、第2次元が定数式でない限り使用できません。

int len = 10; 
int **P = new int[len][len]; // error: non-constant expression as array bound (on 2nd dimension) 

このリンクをクリックすると、素敵な回避策Copy 2D array using memcpy?を与える: 次の試みは第二次元が定数式でなければならないこと、コンパイラのエラーを示します。

関連する問題