Member 14652051 Ответов: 1

Как создать массив строковых массивов динамического размера в C++


Мне нужно считывать входные данные из stdin и хранить значения в массиве, так что каждое слово в строке хранится как массив строк.

Пример:
Стандартный ввод:
Привет. Меня зовут А.
Я из Б.

Выход:
{
{"Здравствуйте","мой","имя","есть","А."},
{"Я","есть","от","Б"."}
}

Ценю любую помощь.

Что я уже пробовал:

Я пытался поместить всю строку в одну строку, но я не в состоянии разорвать ее.

инт num_of_lines = 5;
строка str_arr[num_of_lines];
for(int i=0;i<num_of_lines;i++){
getline(cin="">>ws,str_arr[i])
}

при этом я получаю вывод в виде
{"Привет. Меня зовут А.",
- Я из Б."}

1 Ответов

Рейтинг:
1

CPallini

Я бы использовал std::vector и std::istringstream. Программа

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

int main()
{
  const std::string input = "Hello. My name is A.\nI am from B.\n";

  vector <vector < string > > vline;

  while ( true )
  {
    string line;
    getline(cin, line);
    if ( ! cin ) break;
    vector <string> vword;
    istringstream iss ( line );
    while ( true )
    {
      string word;
      iss >> word;
      if ( ! iss ) break;
      vword.push_back( word );
    }
    vline.push_back( vword );
  }

  cout << "{\n";
  for (const auto & vw : vline)
  {
    cout << "{";
    for ( const auto & w  : vw )
    {
      cout << "\"" << w << "\", ";
    }
    cout << "},\n";

  }
  cout << "}\n";
}
кормят с помощью
Hello. My name is A.
I am from B.
производит
{
{"Hello.", "My", "name", "is", "A.", },
{"I", "am", "from", "B.", },
}

Такой вывод, хотя и не совсем тот, который требуется, является приемлемой ( :-D ) имитацией.