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