所以我在下面有这个程序,目前我运行它后输出:

abcdefghijklmnopqrstuvwxyz
eklpyqrbgjdwtcaxzsnifvhmou
TEst
iyniЉhb�{���{���`�5b�v4b�q4b�{����8b�`�5b��`{���{����o���7�vb��{�����or��o���@`�lhb���5b��`x@


有什么原因吗?
而且目前打算随机化的线不是随机的

#include <algorithm>
#include <array>
#include <iostream>
#include <numeric>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    char Text[256];
    array<char, 26> letters;
    iota(letters.begin(), letters.end(), 'a');
    for(char c: letters) //Array before shuffling
    {
        cout << c;
    }
    cout << '\n';
    random_shuffle(letters.begin(), letters.end());
    for(char c: letters) //After shuffling
    {
        cout << c;
    }
    cout << '\n';
    cin.getline (Text,256);
    for (char & c : Text)
    {
        if (c == 'a' || c == 'A')
        {
            cout << letters[0];
        }
        else if (c == 'b' || c == 'B')
        {
             cout << letters[1];
        }
        else if (c == 'c' || c == 'C')
        {
             cout << letters[2];
        }
        else if (c == 'd' || c == 'D')
        {
             cout << letters[3];
        }
        else if (c == 'e' || c == 'E')
        {
             cout << letters[4];
        }
        else if (c == 'f' || c == 'F')
        {
             cout << letters[5];
        }
        else if (c == 'g' || c == 'G')
        {
             cout << letters[6];
        }
        else if (c == 'h' || c == 'H')
        {
             cout << letters[7];
        }
        else if (c == 'i' || c == 'I')
        {
             cout << letters[8];
        }
        else if (c == 'j' || c == 'J')
        {
             cout << letters[9];
        }
        else if (c == 'k' || c == 'K')
        {
             cout << letters[10];
        }
        else if (c == 'l' || c == 'L')
        {
             cout << letters[11];
        }
        else if (c == 'm' || c == 'M')
        {
             cout << letters[12];
        }
        else if (c == 'n' || c == 'N')
        {
            cout << letters[13];
        }
        else if (c == 'o' || c == 'O')
        {
            cout << letters[14];
        }
        else if (c == 'p' || c == 'P')
        {
            cout << letters[15];
        }
        else if (c == 'q' || c == 'Q')
        {
            cout << letters[16];
        }
        else if (c == 'r' || c == 'R')
        {
            cout << letters[17];
        }
        else if (c == 's' || c == 'S')
        {
            cout << letters[18];
        }
        else if (c == 't' || c == 'T')
        {
            cout << letters[19];
        }
        else if (c == 'u' || c == 'U')
        {
            cout << letters[20];
        }
        else if (c == 'v' || c == 'V')
        {
            cout << letters[21];
        }
        else if (c == 'w' || c == 'W')
        {
            cout << letters[22];
        }
        else if (c == 'x' || c == 'X')
        {
            cout << letters[23];
        }
        else if (c == 'y' || c == 'Y')
        {
            cout << letters[24];
        }
        else if (c == 'z' || c == 'Z')
        {
            cout << letters[25];
        }
        else if (c == ' ')
        {
            cout << ' ';
        }
        else if (c == '/n')
        {
            return 0;
        }
        else
        {
        cout << c;
        }
    }
}

最佳答案

else if (c == '/n')
{
    return 0;
}


应该

else if (c == '\n')
{
    return 0;
}


但是,如果您要寻找输入的结尾,那么您实际上想要

else if (c == '\0')
{
    return 0;
}


这是一个空终止符,表示字符串的结尾。基本上,您将获得存储在整个256个字符数组中的所有垃圾。

但是,这对您的29个if else语句没有帮助。尝试这个:

if(c == ' '){ // Space
    cout << ' ';
}
else if(c >= 'A' && c <= 'Z'){ // Uppercase
    cout << letters[c - 'A'];
}
else if(c >= 'a' && c <= 'z'){ // Lowercase
    cout << letters[c - 'a'];
}
else if(c == '\0'){ // End of string
    return 0;
}
else{ // Anything else
    cout << c;
}


怎么运行的:

计算机中没有“字母”,只有二进制。 'A'不存在,但是0100000165也是A。因此,如果您输入“ A”,您的程序将看到65。但是,我碰巧知道在您的letters数组中,您在0位置上有一个A,因此在letters[0] == letters['A' - 'A']中。相同的逻辑可用于B,C,D等。小写字母也一样,它们的范围不同(97-122)。

关于c++ - C++打印奇怪的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27101642/

10-11 22:39
查看更多