我的程序无法识别字母数组中的字母
My program just will not recognize letters from alphabetical arrays
所以这个程序不会识别小写字母和大写字母数组中的字母。我已经浪费了太多时间试图解决这个问题,但我就是不明白。
它似乎只能识别 'a' 或 'A' 但即便如此也不总是如此。
#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>
char ALPHABETLower[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char ALPHABETUpper[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
string plaintext = "abcdefghijklmnoprstquvwyzABCDEFGHIJKLMNOPRSTQUVWXYZ";
int i;
int j;
int main(void) {
for(i = 0; plaintext[i] != 0; i++) {
for(j = 0; plaintext[i] == ALPHABETUpper[j]; j++)
printf("%c\n", ALPHABETUpper[j]);
for(j = 0; plaintext[i] == ALPHABETLower[j]; j++)
printf("%c\n", ALPHABETLower[j]);
}
}
首先,我认为您只需要在程序中包含 stdio.h
。
然后你有 string plainText = "...";
,但你应该有 char* plainText = "...";
,因为那是你用 C 语言制作字符串的方式(我不知道你拥有的所有这些库是否都是为了制作那个 string
变量,但是制作字符串的最简单和正确的方法就像我做的那样, char
).
所以你在第一个 for
循环中有 i = 0; plaintext[i] != 0; i++
这样你就可以在字符串结束时停止,但我不认为这真的有效,你可以做到的最好方法是 i = 0; i < 52; i++
.
您在其他 for
循环中还有另一个问题。您正在尝试在 for
循环中创建条件语句,但我认为这甚至不可能(在 while
循环中您可以)。所以也许那些 for 循环应该是这样的:
#define MaxLetters 52
#define AlphabetLetters 26
(. . .)
int main(void)
{
(. . .)
for(i = 0; i < MaxLetters; i++) { //52 letters in total on plainText string
for(j = 0; j < AlphabetLetters; j++) //26 letters in total on ALPHABETUpper
{
if(plainText[i] == ALPHABETUpper[j])
printf("%c\n", ALPHABETUpper[j]);
}
for(j = 0; j < AlphabetLetters; j++) //26 letters in total on ALPHABETLower
{
if(plainText[i] == ALPHABETLower[j])
printf("%c\n", ALPHABETLower[j]);
}
(. . .)
}
所以我努力通过,这是完整的工作版本。我之前的错误是让 for 循环 运行 无限,除非它能找到 ALPHABETUpper.
中的字符
#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>
char ALPHABETLower[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char ALPHABETUpper[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
string plaintext;
int i;
int j;
int main(int argc, string argv[2]) {
for(i = 0; argv[1][i] != 0; i++)
if(argv[1][i] < 48 || argv[1][i] > 57) {
printf("Usage: ./caesar key\n");
return 1;
}
plaintext = get_string("Plaintext: \n");
for(i = 0; plaintext[i] != 0; i++) {
if(isalpha(plaintext[i]) == 0)
printf("%c", plaintext[i]);
for(j = 0; j < 26; j++) {
if(plaintext[i] == ALPHABETUpper[j])
printf("%c", ALPHABETUpper[(j + atoi(argv[1])) % 26]);
if(plaintext[i] == ALPHABETLower[j])
printf("%c", ALPHABETLower[(j + atoi(argv[1])) % 26]);
}
}
}
所以这个程序不会识别小写字母和大写字母数组中的字母。我已经浪费了太多时间试图解决这个问题,但我就是不明白。
它似乎只能识别 'a' 或 'A' 但即便如此也不总是如此。
#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>
char ALPHABETLower[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char ALPHABETUpper[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
string plaintext = "abcdefghijklmnoprstquvwyzABCDEFGHIJKLMNOPRSTQUVWXYZ";
int i;
int j;
int main(void) {
for(i = 0; plaintext[i] != 0; i++) {
for(j = 0; plaintext[i] == ALPHABETUpper[j]; j++)
printf("%c\n", ALPHABETUpper[j]);
for(j = 0; plaintext[i] == ALPHABETLower[j]; j++)
printf("%c\n", ALPHABETLower[j]);
}
}
首先,我认为您只需要在程序中包含 stdio.h
。
然后你有 string plainText = "...";
,但你应该有 char* plainText = "...";
,因为那是你用 C 语言制作字符串的方式(我不知道你拥有的所有这些库是否都是为了制作那个 string
变量,但是制作字符串的最简单和正确的方法就像我做的那样, char
).
所以你在第一个 for
循环中有 i = 0; plaintext[i] != 0; i++
这样你就可以在字符串结束时停止,但我不认为这真的有效,你可以做到的最好方法是 i = 0; i < 52; i++
.
您在其他 for
循环中还有另一个问题。您正在尝试在 for
循环中创建条件语句,但我认为这甚至不可能(在 while
循环中您可以)。所以也许那些 for 循环应该是这样的:
#define MaxLetters 52
#define AlphabetLetters 26
(. . .)
int main(void)
{
(. . .)
for(i = 0; i < MaxLetters; i++) { //52 letters in total on plainText string
for(j = 0; j < AlphabetLetters; j++) //26 letters in total on ALPHABETUpper
{
if(plainText[i] == ALPHABETUpper[j])
printf("%c\n", ALPHABETUpper[j]);
}
for(j = 0; j < AlphabetLetters; j++) //26 letters in total on ALPHABETLower
{
if(plainText[i] == ALPHABETLower[j])
printf("%c\n", ALPHABETLower[j]);
}
(. . .)
}
所以我努力通过,这是完整的工作版本。我之前的错误是让 for 循环 运行 无限,除非它能找到 ALPHABETUpper.
中的字符#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>
char ALPHABETLower[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char ALPHABETUpper[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
string plaintext;
int i;
int j;
int main(int argc, string argv[2]) {
for(i = 0; argv[1][i] != 0; i++)
if(argv[1][i] < 48 || argv[1][i] > 57) {
printf("Usage: ./caesar key\n");
return 1;
}
plaintext = get_string("Plaintext: \n");
for(i = 0; plaintext[i] != 0; i++) {
if(isalpha(plaintext[i]) == 0)
printf("%c", plaintext[i]);
for(j = 0; j < 26; j++) {
if(plaintext[i] == ALPHABETUpper[j])
printf("%c", ALPHABETUpper[(j + atoi(argv[1])) % 26]);
if(plaintext[i] == ALPHABETLower[j])
printf("%c", ALPHABETLower[(j + atoi(argv[1])) % 26]);
}
}
}