2016-09-28 6 views
-1

Das war also eine Problemaussage von CodeLeet, um den längsten palindromischen Teilstring zu finden.Warum unterstützt Visual Studio keine Variablen für die Array-Größe?

In der codeleet Schnittstelle diese Lösung funktioniert:

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); 
    } 
}; 

Aber wenn das schreibt die gleiche Sache wie eine Funktion in Visual Studio:

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); 
} 

heißt es für die Variable LEN: expression haben muss ein konstanter Wert? Ist das ein Problem mit der Studio-Idee? Wie kann ich das lösen?

+0

Mögliches Duplikat von [Arrays variabler Länge in C++?] (Http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c) –

Antwort

2

Da Arrays mit variabler Länge (Array-Deklarationen, die nicht constexpr Variablen verwenden) sind ein C99-Feature, nicht eine C++ - Funktion. Keine Version von C++ bietet sie an, und keine Version von Visual Studio bietet diese spezielle C99-Funktion.

Wenn Ihr Code in anderen C++ - Compilern kompiliert wird, liegt das an C++ - Sprachenerweiterungen, die sie zusätzlich zum C++ - Standard bereitstellen.

0

Es gibt kein Problem mit dem VS-Compiler. In C++ können Sie new int[] verwenden, um ein 1-dimensionales Array der Laufzeit definierten Länge zu erstellen, aber new int[][] ist nicht verfügbar, es sei denn, die 2. Dimension ist ein konstanter Ausdruck. Der folgende Versuch, einen Compiler-Fehler gibt, dass die zweite Dimension ein konstanter Ausdruck sein muss:

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

Dieser Link gibt eine schöne Abhilfe Copy 2D array using memcpy?.

Verwandte Themen