Как увеличить Буквы в c++?

Я создаю Шифр Цезаря на c++, и я не могу понять, как увеличить букву.

мне нужно увеличить букву на 1 каждый раз и вернуть следующую букву в алфавите. Что-то вроде следующего, чтобы добавить 1 к 'a' и return 'b'.

char letter[] = "a";
cout << letter[0] +1;

8 ответов


этот фрагмент должен заставить вас начать. letter это char а не массив chars ни строки.

на static_cast обеспечивает результат 'a' + 1 трактуется как char.

> cat caesar.cpp          
#include <iostream>

int main()
{
    char letter = 'a';
    std::cout << static_cast<char>(letter + 1) << std::endl;
}

> g++ caesar.cpp -o caesar
> ./caesar                
b

остерегайтесь, когда вы доберетесь до 'z' (или 'Z'!) и удачи!


он работает как есть, но потому, что добавление способствует выражению int вы хотите вернуть его в char снова, чтобы ваш IOStream отображал его как символ, а не число:

int main() {
   char letter[] = "a";
   cout << static_cast<char>(letter[0] + 1);
}

выход: b

также добавьте логику обертывания (так что когда letter[0] is z, установить в a вместо увеличения), и рассмотрим случай.


работает ли letter++? В целом char является числовым типом, поэтому он будет увеличивать код ascii. Но я считаю, что это должно быть определено как char letter Не массив. Но остерегайтесь добавлять один к "Z". Вы получите ' ['=P

#include <iostream>

int main () {
    char a = 'a';
    a++;
    std::cout << a;
}

Это, кажется, работает хорошо ;)


char letter = 'a'; 
cout << ++letter;

Он работает, но не забывайте, что если вы увеличиваете "z", вам нужно получить "a", поэтому, возможно, вам следует пройти мимо функции проверки, которая выводит "a", когда вы получаете "z".


waleed@waleed-P17SM-A:~$ nano Good_morning_encryption.СРР waleed@waleed-P17SM-A:~$ g++ Good_morning_encryption.cpp-o Good_morning_encryption.из waleed@waleed-P17SM-A:~$ ./Good_morning_encryption.из Введите текст:валид Зашифрованный текст: jnyrrq waleed@waleed-P17SM-A:~$ cat Good_morning_encryption.cpp

    #include <iostream>
    #include <string>

    using namespace std;


    int main() {

    //the string that holds the user input
    string text;
    //x for the first counter than makes it keeps looping until it encrypts the user input
    //len holds the value (int) of the length of the user input ( including spaces)
    int x, len;

    //simple console output
    cout << "Enter your text:";
    //gets the user input ( including spaces and saves it to the variable text
    getline(cin, text);
    //give the variable len the value of the user input length
    len = (int)text.length();
    //counter that makes it keep looping until it "encrypts" all of the user input (that's why it keeps looping while its less than len
    for(x = 0; x < len; x++) {
    //checks each letts (and spaces) in the user input (x is the number of the offset keep in mind that it starts from 0 and for example text[x] if the user input was waleed would be w since its text[0]
    if (isalpha(text[x])) {
    //converts each letter to small letter ( even though it can be done another way by making the check like this if (text[x] =='z' || text[x] == 'Z')
    text[x] = tolower(text[x]);
    //another counter that loops 13 times
    for (int counter = 0; counter < 13; counter++) {

    //it checks if the letts text[x] is z and if it is it will make it a
    if (text[x] == 'z') {

    text[x] = 'a';

    } 
    //if its not z it will keeps increamenting (using the loop 13 times)
    else {


    text[x]++;

    }

    }
    }
    }
//prints out the final value of text
    cout << "Encrypted text:\n" << text << endl;
    //return 0 (because the the main function is an int so it must return an integer value
    return 0;

    }

Примечание: это называется шифром Цезаря шифрование он работает следующим образом:

ABCDEFGHIJKLMNOPQRSTUVWXYZ NOPQRSTUVWXYZABCDEFGHIJKLM так, например, мой имя валид он будет написан как: JNYRRQ так что его просто добавить 13 букв к каждой букве

Я надеюсь, что это помогло вам


можно использовать 'a'+((буква - 'a'+n)%26); предполагая, что после " z "вам нужно "a", т. е. " z "+1= "a"

    #include <iostream>

    using namespace std;

    int main()
    {
       char letter='z';
       cout<<(char)('a' + ((letter - 'a' + 1) % 26));

       return 0;
    }

смотрите это https://stackoverflow.com/a/6171969/8511215


приведите букву[n] в байт* и увеличьте ее ссылочное значение на 1.