возврат в вектор , показывающий ошибку

#c #string #vector #stl #push-back

#c #строка #вектор #stl #возврат

Вопрос:

Я вставил строку, я хочу, чтобы каждый символ был отдельно вставлен в векторную строку. При использовании push_back функции я получаю следующую ошибку:

ошибка: нет соответствующей функции для вызова
'std::vector<std::__cxx11::basic_string<char> >::push_back(__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_typeamp;)' 27 | color.push_back(str[i]);**

 #include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main(){
    int t;
    cin >> t;
    string str;
    char in;
    while(t--){
        cin >> str;
        sort(str.begin(), str.end());

        vector<string> chr;
        for (int i = 0; i < str.size(); i  ){
            chr.push_back(str[i]);
        }

        for (int i = 0; i < chr.size(); i  )
            cout << chr[i] << " ";
    }
}
  

Заранее большое вам спасибо

Комментарии:

1. Вам действительно нужен вектор строк? Звучит так, как будто вам нужен вектор символов std::vector<char>

2. Функция Push_back ожидает строку, а не символ, str[i] — это символ, а не строка

Ответ №1:

Проблема в том, что у вас есть вектор, и вы пытаетесь вызвать push_back с символом вместо строки. Вы не можете вернуть значение типа x в свой вектор, если этот тип неявно не преобразуется в строку, и, к сожалению, нет конструктора для std::string, который принимает символ.

Вы можете либо решить эту проблему, превратив свой vector<string> в vector<char>, либо вызвав push_back со строкой вместо символа.

Вариант 1: Сделайте chr вектором char вместо вектора string

 vector<char> chr;
for(int i = 0; i < str.size(); i  ){
  chr.push_back(str[i]);
}
  

Или

 vector<char> chr(str.begin(), str.end());
  

Вариант 2: Измените код с помощью push_back, чтобы использовать строку вместо символа

 vector<string> chr;
for(int i = 0; i < str.size(); i  ){
  chr.push_back(str.substr(i, i i));
}
  

Исходя из того, что вы делаете, вариант 1, вероятно, то, что вы хотите. Однако, если вам действительно нужен вектор строк, вариант 2 будет скомпилирован.

Комментарии:

1. в итоге я вызвал функцию get string. строка getString(символ x) { string s(1, x); возвращает s; }