У меня есть std::string
, который содержит случайную фразу.
Например:
std::string str{ "Lorem ipsum" };
Я хотел бы взять эту строку и преобразовать ее в std::vector<std::vector<char>>
(каждый подмассив будет содержать все символы для одного слова во фразе, т. е. разделение на пробелы).
Например, после конвертации:
std::vector<std::vector<char>> arr{ { 'L', 'o', 'r', 'e', 'm' }, { 'i', 'p', 's', 'u', 'm' } };
Кроме того, я хотел бы иметь возможность преобразовать std::vector<std::vector<char>>
обратно в std::string
.
Спасибо вам за помощь!
Прочтите: Как перебирать слова строки?. Затем вы можете использовать итераторы для преобразования строк в вектор (AFAIR также существует множество существующих вопросов/ответов, подобных этому, на SO).
Проще использовать vector<string>>. You can still subscript each char like
v[i][j]`.
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<vector<char>> v;
vector<char> c;
string s = "hello world this";
for(int i=0;i<s.size();i++)
{
if (s[i]==' ')
{
v.push_back(c);
c.clear();
}else{
c.push_back(s[i]);
}
}
for(int i =0;i<v.size();i++)
{
for(int j=0;j<v[i].size();j++)
{
cout<<v[i][j];
}
cout<<endl;
}
return 0;
}
Небольшая поправка для будущих зрителей. Последнее слово не вставляется v
, потому что строка не заканчивается пробелом. Чтобы исправить: добавьте линии v.push_back(c);
и c.clear();
вне первой петли for
.
Это ответ только для кода. Ответы, содержащие только код, имеют раздражающую тенденцию генерировать Программисты Cargo Cult. Вы можете спасти это, объяснив, почему код работает и почему. Также рассмотрите возможность использования описательных имен переменных и удаления известных причин проблем, таких как using namespace std;
, и нестандартных заголовков, таких как #include <bits/stdc++.h>
.
Начните с меньшей проблемы: как бы вы разбили строку на пробелы?