2017-01-01 4 views
-1

Ich versuche, durch jeden Zeichenfolge-Index zu gehen und die geraden Indizes zuerst zu drucken, und dann alle ungeraden Indexe zu drucken. Allerdings bekomme ich einen Segmentierungsfehler und ich weiß nicht, woran es liegt.Durch jedes Zeichen in einem Zeichenfolgenarray gehen

ist hier mein Code:

int sum; 
vector<string> array; 
string temp; 
for (int i = 0; i < num; i++) { 
    cin >> array[i]; 
} 

for (int i = 0; i < num; i++) { 
    temp = array[i]; 
    for (int j = 0; j < temp.size(); j++) { 
     sum = j; 
     if (sum % 2 == 0) { 
      cout << array[i][j]; 
     } 
    } 
} 
cout << " "; 
for (int i = 0; i < num; i++) { 
    temp = array[i]; 
    for (int j = 0; j < temp.size(); j++) { 
     sum = j; 
     if (sum % 2 != 0) { 
      cout << array[i][j]; 
     } 
    } 
} 

Sieht jemand, was ich falsch mache?

+0

Was ist der Punkt der Variable 'sum'? – Shubham

+0

Sie brauchen nicht die 'sum% 2'. Sie sollten die Inkremente auf "i + = 2" und ebenso auf "j" einstellen. Beginnen Sie bei 0 für gerade Zahlen und 1 für ungerade Zahlen. –

Antwort

0

vector<string> array ist ein leervector, aber Sie versuchen, ihren i ten Wert mit cin >> array[i]; in der ersten Schleife zuzugreifen, also außerhalb der Grenzen bekommen (gibt es keine i ten Index!) Und einen segfault.

Sie sollten neuen Werte an den Vektor anhängen dynamisch oder pre-zuteilen die benötigte Menge an Speicherplatz:

// in the first loop 
string test; 

cin >> test; 
array.push_back(test); 

Eine weitere Option:

// change the declaration 
vector<string> array(num); // a vector of size num 

// or pre-allocate memory after initialisation 
vector<string> array; 
array.resize(num); 
// then the loop... 
0

Sie haben nicht die Größe der deklarierter std::vector <std::string> array und Sie versuchen, es zu indizieren, was Segmentierungsfehler gibt. Sie können array.push_back() verwenden, um die Werte einzufügen, oder Sie müssen die Größe beim Deklarieren des Vektors definieren.

Entweder:

std::vector <std::string> array (num); // given num is known beforehand 

Oder:

vector<string> array; 
string temp; 
for (int i = 0; i < num; i++) { 
    cin >> temp; 
    array.push_back(temp); 
} 
1

Sie sind nicht das Array richtig bevölkern, so dass Ihre Schleifen außerhalb der Grenzen gehen.

etwas ähnlich stattdessen versuchen:

vector<string> array; 
string temp; 

array.resize(num); 
for(int i = 0; i < num; ++i) 
{ 
    cin >> array[i]; 
} 
/* Alternatively: 
for(int i = 0; i < num; ++i) 
{ 
    cin >> temp; 
    array.push_back(temp); 
} 
*/ 
/* Alternatively: 
copy_n(istream_iterator<string>(cin), num, back_inserter(array)); 
*/ 

for(int i = 0; i < num; ++i) 
{ 
    temp = array[i]; 
    for(int j = 0; j < temp.size(); j += 2) 
    { 
     cout << temp[j]; 
    } 
} 

cout << " "; 

for(int i = 0; i < num; ++i) 
{ 
    temp = array[i]; 
    for(int j = 1; j < temp.size(); j += 2) 
    { 
     cout << temp[j]; 
    } 
} 
Verwandte Themen