当我尝试通过 push_back() 添加字符串的特定字符时,它抛出一个类型转换错误

When I attempt to add a specific character of a string through push_back() it throws me a type conversion error

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main() {
    string input;
    getline(cin, input);
    int x = input.length();
    vector<string> arr;
    for(x; x==0; x-2){
        arr.push_back(input[x]);
    }

    return 0;
}

我尝试编译时出现以下错误:

simplearraysum.cpp:16:23: error: reference to type 'const std::__vector_base<std::string, std::allocator<std::string> >::value_type' (aka 'const std::string') could not bind to an lvalue of type 'std::basic_string<char>::value_type' (aka 'char')

arr.push_back(input[x]);

谁能给我一些建议?

代码中有几个错误导致失败;最重要的是 for 循环的第三部分:x-2 计算减法的结果,然后继续。它永远不会存储在任何地方,所以 x 永远不会改变。循环永远运行,一遍又一遍地插入 input[x] 到向量中,直到出现问题。您可能想使用:x = x-2.

第二个问题是如果 x 是奇数 - 减去 2 永远不会恰好为零,因此循环将再次永远不会停止。您应该使用 x>=0 或类似的条件。

三、input[x]是char,不是string;向量需要字符串。这就是显示的错误消息所说的内容。

第四,如果 x 是字符串的长度,input[x] 访问字符串后面的字符 - 在 C 和 C++ 中,索引从 0 开始,所以 x 个字符的数组来自 arr[0]到达 [x-1].