所以我在下面有这个程序,目前我运行后输出:
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;
}
}
}
答案 0 :(得分:3)
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”不存在,01000001
65
是A
的{{1}}。因此,如果您输入“A”,您的程序将会看到65.但是,我恰好知道在您的letters
数组中,您的A位置为0
,因此{{1} }。相同的逻辑可用于B,C,D等。对于小写字母也是如此,它们只是在不同的范围内(97-122)。
答案 1 :(得分:0)
问题在这里
else if (c == '/n') // '/n' is not correct
将其更改为
else if (c == '\0') // Check EOF