вектор строки печатается в int? - PullRequest
0 голосов
/ 29 марта 2020

Я сейчас выполняю упражнение с векторами и наткнулся на этот вопрос.

Процедура, которая принимает переменную массива размером 4 на 4. Переменная массива должна быть строкового типа. Содержимое массива показано ниже.

Содержимое:

aa  ab  ac  ad
ba  bb  bc  bd
ca  cb  empty   cd
da  db  dc  dd

Это то, что ваша процедура должна сделать, получает плату и отображает для пользователя, как показано ниже,

1   2   3   4
5   6   7   8
9   10  empty   12
13  14  15  16

Мне удалось распечатать его в виде строк, но я не знаю, как превратить его в int после печати. ​​

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

int main() 
{ 
    vector<vector<string> > thirdQuiz
    { 
        { "aa", "ab", "ac", "ad" }, 
        { "ba", "bb", "bc", "bd" }, 
        { "ca", "cb", "empty", "cd" },
        { "da", "db", "dc", "dd" },  
    };

    // Displaying the 2D vector   
    for (int i = 0; i < thirdQuiz.size(); i++) 
    { 
        for (int j = 0; j < thirdQuiz[i].size(); j++)
        {
            cout << thirdQuiz[i][j] << " "; 
        } 
        cout << endl; 
    } 
    return 0; 
} 

1 Ответ

1 голос
/ 29 марта 2020

Если я правильно понял, вам нужно отобразить индекс. Затем появляется несколько возможностей.
Один из них:

  1. Умножьте внешний индекс на внутренний размер и добавьте внутренний счетчик:
    auto count = i * thirdQuiz[i].size() + j + 1; Но имейте в виду, что это работает, только если внутренний все векторы имеют одинаковый размер.
  2. Затем необходимо проверить, является ли значение пустым, затем вывести «empty» или число.
    for (int i = 0; i < thirdQuiz.size(); i++) { 
        for (int j = 0; j < thirdQuiz[i].size(); j++) {
            if(!thirdQuiz[i][j].empty() && thirdQuiz[i][j] != "empty"){
                std::cout << i * thirdQuiz[i].size() + j + 1 << " ";
                continue;
            }
            std::cout << "empty" << " "; 
        } 
        std::cout << endl; 
    } 

Более надежный способ будет просто посчитать все записи в ваших векторах:

    size_t count{};
    for (auto const& inner_vec: thirdQuiz) { 
        for (auto const& string_val: inner_vec) {
            ++count;
            if(!string_val.empty() && string_val != "empty"){
                std::cout << count << " ";
                continue;
            }
            std::cout << "empty" << " "; 
        } 
        std::cout << endl; 
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...