Как прочитать ввод в массив строк, где ни одна строка не длиннее 4 символов?

Как можно было бы пойти дальше и написать части строки внутри цикла for? Допустим, у меня есть этот код:

string str[64];
for( int i = 0; i < 64; i = i + 4 )
{
cin >> str[i];
}

Каждый раз, когда он входит в цикл, я хочу написать четыре элемента строки. Как бы я пошел дальше и к этому, так как код, который я написал, не работает? :П

Спасибо 🙂

-4

Решение

Попробуй это

for( int i = 0; i < 64; i = i + 4 )
{
for( int j = i; j < i + 4; j++ )
cin >> str[j];
}
2

Другие решения

Обратите внимание, что:

std::string str[64];

объявляет массив из 64 std::string объекты. Если вы хотите читать со стандартного ввода за символом и заполнять этот массив строками максимальной длины 4, то это может выглядеть так:

char c;
for (int i = 0, j = 0; std::cin >> c && i < 64; ++j) {
str[i].push_back(c);
if (j == 3) {
i++;
j = 0;
}
}

Однако также подумайте о том, чтобы сделать обратное:

  1. читать «длинную» строку сразу (если ваш ввод находится в одной строке, используйте std::getline)
  2. использование std::string::substr разбить эту строку на маленькие строки длиной 4
    • и если вам нужно хранить эти токены в памяти, используйте std::vector вместо массива

т.е.

std::string line;
if (std::getline(std::cin, line))
{
size_t lineLen = line.length();
std::vector<std::string> tokens;

for (int i = 0; i < lineLen; i = i + 4)
tokens.push_back(line.substr(i,4));

for (size_t i = 0; i < tokens.size(); ++i)
std::cout << tokens[i] << ", ";
}

Вы также можете рассмотреть вопрос о звонке tokens.reserve(len/4 + 1); после tokens вектор создан для предотвращения избыточного перераспределения памяти. И не забудьте #include <vector>,

0

По вопросам рекламы [email protected]