Как получить более простой способ создания алфавита на C ++? - PullRequest
5 голосов
/ 25 мая 2020

Я пытаюсь создать проект, поэкспериментировать и изучить C ++, я не закончил sh его создание, но он делает, вы вводите 3 или 4 (переменная no c) слова и программа проходит через все возможные (не c) буквенные слова или бессмыслицу, пока не найдет ваше, поэтому есть 2 фактора: длина слова или бессмыслица и какие символы он может вводить, в моем случае я просто хочу алфавит, поэтому вот мой код:

#include <iostream>
#include <unistd.h>
using namespace std;

const int noc = 3;

int main() {

    string used[noc];
    string inp;
    cin >> inp;
    char albet[] = {'a','b','c'};
    cout << "Starting..." << endl;
    usleep(1);
    string aiput = "";
    while(aiput != inp){
        for(int i = 0; i <= noc; i++){
            aiput = aiput +
        }
    }

    return 0;
}

в настоящее время мне нужен алфавит в массиве под названием «albet» (я придумываю короткие слова для обозначения того, что они означают, их легко забыть), поэтому, пожалуйста, не могли бы вы дать мне способ быстро сгенерировать алфавит на C ++ вместо того, чтобы вводить их все по одному

Ответы [ 5 ]

5 голосов
/ 25 мая 2020

Вы можете использовать std::iota, что является отличным алгоритмом для этого варианта использования:

char albet[26] {};
std::iota(std::begin(albet), std::end(albet), 'a');

Вот демонстрация .

Обратите внимание, что это не гарантирует работу в c ++, если у вас нет кодировки ASCII, но если вы можете положиться на это, все будет в порядке.

4 голосов
/ 25 мая 2020

Отсутствует один довольно очевидный ответ.

Когда вам нужен символьный массив, вам не нужно использовать отдельные символьные литералы один за другим, как в

char albet[] = {'a','b','c','d','e','f',... uff this is tedious ...};

Вы можете использовать вместо строкового литерала:

const std::string albet{"abcdefghijklmnopqrstuvwxyz"};

Мне потребовалось ~ 10 секунд для ввода, и по сравнению с другими ответами, это не зависит от кодировки ASCII (которая не гарантируется).

0 голосов
/ 25 мая 2020

Вы можете легко преобразовать числа в ascii, используя static_cast<char>. Зная это, вы можете поместить его в al oop, где «i» начинается с 65 и заканчивается 26 раз позже. Чтобы отслеживать, где вы должны поместить буквы, вы можете создать переменную, в данном случае 'j', которая также будет увеличиваться в конце примерно на 1 l oop, но начинается с нуля, а не с 65.

char alphabet[] = {};
int j = 0;
for(int i = 65; i < 91; i++)
{
    alphabet[j] = static_cast<char>(i);
    j++;
}

Это даст вам полный алфавит в кратчайшие сроки.

РЕДАКТИРОВАТЬ: вы можете проверить "asciitable.com", чтобы увидеть коды для строчного алфавита, если вы sh вместо этого.

0 голосов
/ 25 мая 2020

Поскольку все символы могут быть представлены в кодах ASCII ('a' начинается с 97, все коды ASCII - int), вы можете просто сделать al oop для этого. Например:

char albet[26];

for (int ch = 'a'; ch <= 'z'; ch++) {
    //do ch-'a' because we start at index 0
    albet[ch-'a'] = ch;
}

и готово!

0 голосов
/ 25 мая 2020

Каждая буква имеет представление ASCII. Подробнее об этом здесь .

Они обрабатываются как числа, преобразуются в символы. Например, буква a будет представлена ​​десятичным числом 97.

int aInAscii = 97;
printf("%c", (char)aInAscii);

Верхний код будет печатать, как и следовало ожидать, букву a. Зачем? Потому что мы только что преобразовали число 97 в соответствующий символ ASCII.

Таким образом, мы могли бы сгенерировать алфавит, используя только числа. Вот краткий пример (я предпочел использовать его раньше, чтобы начальная и конечная точки были более ясными.

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<char> alphabet;
    int aLetterCode = (int)'a'; // ASCII code for letter a (97)
    int zLetterCode = (int)'z'; // ASCII code for letter z (122)
    for (int charAsciiCode = aLetterCode; charAsciiCode <= zLetterCode; charAsciiCode++) {
        alphabet.push_back((char)charAsciiCode);
    }
    for (char c : alphabet) {
        cout << c << " ";
    }
    return 0;
}
...