我试图遍历每个字符串索引并首先打印偶数索引,然后打印所有奇数索引。但是我收到了分段错误,而且我不知道它是由什么造成的。
这是我的代码:
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];
}
}
}
有人看到我做错了吗?
答案 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);
}