нет соответствующей функции для вызова 'std :: vector - PullRequest
0 голосов
/ 29 мая 2020

Вопрос, который я решаю, гласит: я должен взять T тестовых случаев. Для каждого тестового примера я должен взять строку в качестве ввода, затем мне нужно расположить строку ввода как: строка в четной позиции {двойной пробел} строка в нечетной позиции (пример: input - StackOverflow, вывод - Sakvrlw tcOefo ). Я написал следующий код, в котором я беру входные данные для всех тестовых случаев и сохраняю их в векторе. Затем я присваиваю элементы вектора другой объявленной строке s.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
     int T,i;
     cout << "Enter no. of test cases: ";
     cin >> T;

     vector<string> v;
     vector<string> odd;
     vector<string> even;
     string str;

     for(int i=0; i<T; i++){
        cin >> str;
        v.push_back(str);
     }


     string s;

     for(i=0; i<v.size(); i++){
        s = v.at(i);

        for(i=0; i<s.size(); i++){
            if(i==0){
                even.push_back(s[i]);  //*This is where I am getting error*.
            }else if(i==1){
                odd.push_back(s[i]);
            }else{
                if(i%2==0){
                    even.push_back(s[i]);
                }else{
                    odd.push_back(s[i]);
                }
            }
        }

        for(i=0; i<even.size(); i++){
            cout << even.at(i);
        }

        cout << "  ";

        for(i=0; i<odd.size(); i++){
            cout << odd.at(i);
        }

        cout << endl;

        even.clear();
        odd.clear();
        s.clear();
     }


     return 0;
}


При компиляции вышеуказанного кода я получаю "no matching error for call std::vector...". Что именно я делаю не так?

Ответы [ 2 ]

4 голосов
/ 29 мая 2020

Я получаю следующую ошибку при компиляции вашего кода:

main.cpp:34:36: error: no matching function for call to ‘std::vector >::push_back(char&)’.

Это происходит потому, что even - это vector<string>, а s[i] - char. Вы пытаетесь вставить символ в вектор строк, и это невозможно, поскольку они имеют разные типы.

Если я правильно понял вашу проблему, even и odd должны быть либо vector<char> или string, не vector<string>.

Измените объявления на:

string odd;
string even;

Это также позволяет заменить печать:

for(i=0; i<even.size(); i++) {
    cout << even.at(i);
}

С:

cout << even;
0 голосов
/ 29 мая 2020

Добро пожаловать в Stack Overflow @ Mani sh Jha,

Итак, s[i] - это char

s - это std::string или массив char s

Метод должен быть push_back(std::string&) не push_back(std::char&)

Метод шаблона класса std::vector::push_back(T&) является своего рода «специализированным», когда вы инициализировали свой четный / нечетный вектор, так что либо добавьте std::string к std::vector<std::string>, либо char к std::vector<char>

В противном случае нет обработки для вызова метода std::vector<T>::push_back(T&)

Надеюсь, я ответил правильно к вашим ожиданиям, если есть какие-то ошибки, пожалуйста, сообщите мне.

...