遍历字符串数组中的每个字符

时间:2017-01-01 18:12:18

标签: c++ arrays string segmentation-fault

我试图遍历每个字符串索引并首先打印偶数索引,然后打印所有奇数索引。但是我收到了分段错误,而且我不知道它是由什么造成的。

这是我的代码:

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

有人看到我做错了吗?

3 个答案:

答案 0 :(得分:1)

您没有正确填充数组,因此您的循环超出范围。

尝试更像这样的东西:

reloadData()

答案 1 :(得分:0)

vector<string> array vector,但您尝试在第一个循环中使用i访问其cin >> array[i];值,因此越界(没有i索引!)和段错误。

您应该动态地将新值附加到矢量或预先分配所需的空间量:

// in the first loop
string test;

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

另一种选择:

// 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...

答案 2 :(得分:0)

您尚未声明std::vector <std::string> array的大小,并且您正在尝试对其进行索引,从而导致分段错误。您可以使用array.push_back()插入值,或者在声明矢量时必须定义大小。

或者:

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

或者:

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