Заполните вектор алфавитами в зависимости от ввода пользователя и поместите Start и End на краях

Я пытаюсь сделать вектор таким:

Алфавит не идет от А до Я, значения вводит пользователь. Итак, если пользователь вводит 5, я хочу, чтобы вектор был: {start, A, B, C, D, E, end}

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

vector<string> alphabet;
iota(alphabet.start(), alphabet.end(), 'A');

Как подтолкнуть значения start и end?


person Michael Krasjaq    schedule 08.07.2020    source источник
comment
Не могли бы вы опубликовать более подробный пример ввода-вывода? Вы объявили вектор строк, но хотите хранить буквы? К какому типу относятся start,end переменные? Написание alpahbet.end() дважды — это опечатка? Вы можете посмотреть на std::back_inserter, так как функции STL не изменяют размер контейнеров.   -  person Quimby    schedule 08.07.2020


Ответы (2)


Для первых 5 букв алфавита

#include <iostream>
#include <vector>
#include <string>
#include <numeric>

int main() {
  // vector needs to be allocated, +2 is for start and end
  std::vector<std::string> alphabet(5+2); 
  // front() gives you reference to first item
  alphabet.front() = "start";
  // end() gives you reference to last item
  alphabet.back() = "end";
  // you can use iota, but skipping the first and last item in vector
  std::iota(std::next(alphabet.begin()), std::prev(alphabet.end()), 'A'); 

  for (const auto& S : alphabet)
    std::cout<<S<< ", ";
}

Вывод этого блока кода: start, A, B, C, D, E, end,

person stribor14    schedule 08.07.2020

Я думаю, что вы хотите что-то вроде этого:

int numberOfLetters;
std::cin >> numberOfLetters;
std::vector<char> characters(numberOfLetters);
for(int i = 0; i < numberOfLetters; i++)
{
    characters[i] = 65 + i;
}

Это будет работать, потому что символы используют кодировку ASCII, а A имеет значение ASCII, равное 97, и оно увеличивается оттуда, поэтому 65 + 0 = «A», 65 + 1 = «B» и так далее. (Конечно, включите вектор, чтобы иметь доступ к std::vector, или используйте массив C, например: char* characters = malloc(numberOfLetters);

Примечание: вам не нужно использовать число 65, вы можете написать «А» следующим образом:

characters[i] = 'A' + i;

как символы могут быть добавлены, потому что они могут быть представлены как числа. (предложено Чериллом)

person Andrew    schedule 08.07.2020
comment
Вы могли бы также использовать 'a' вместо 97, лучше читать. - person churill; 08.07.2020
comment
Да, я на самом деле не думал об этом, я предпочитаю использовать числа при добавлении символов (или даже шестнадцатеричные, а не десятичные, но десятичные лучше для удобства чтения), но я обновлю это - person Andrew; 08.07.2020
comment
ОП уже знает, как получить вектор, содержащий буквы, вопрос в том, как добавить к нему начало и конец. - person 463035818_is_not_a_number; 08.07.2020