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

Moving through every character in a string array

本文关键字:字符 遍历 字符串 数组      更新时间:2023-10-16

我正在尝试浏览每个字符串索引并首先打印均匀的索引,然后打印所有奇数索引。但是我遇到了一个细分错误,但我不知道它是什么。

这是我的代码:

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