我正在尝试浏览每个字符串索引并首先打印均匀的索引,然后打印所有奇数索引。但是我遇到了一个细分错误,但我不知道它是什么。
这是我的代码:
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];
}
}
}
有人看到我做错了什么吗?
您无法正确填充数组,因此您的循环脱离了界限。
尝试更多这样的东西:
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];
}
}
vector<string> array
是一个 empty vector
,但是您正在尝试使用第一个循环中的 cin >> array[i];
访问其 i
th值,从而脱离界限(<em)>没有 i
th index !)和segfault。
您应该附加动态上的新值或预先分配所需的空间:
// 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...
您尚未声明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);
}