我對C很新穎。我希望能夠移動字母'x'的次數來創建基本密碼。C凱撒密碼ASCII字母換行
我遇到了islower()函數的問題。我使用'我',但是,我無法將其更改爲角色。
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
string p;
int main(int argc, string argv[])
{
//if argument count does not equal 2, exit and return 1
if (argc != 2)
{
printf("Less or more than 2 arguments given, exiting...\n");
return 1;
}
else //prompt user for plaintext to encrypt
{
p = GetString();
}
//take the second part of the array (the int entered by user) and store as k (used as the encryption key)
//string k = argv[1];
int k = atoi(argv[1]);
//function:
// c = (p + k) % 26;
//iterate over the characters in the string
//p represents the position in the alphabet of a plaintext letter
//c likewise represents a position in the alphabet
char new;
for (int i = 0, n = strlen(p); i < n; i++)
if (islower((char)i))
{
//printf("%c\n", p[i] + (k % 26));
printf("This prints p:%s\n", p);
printf("This prints i:%d\n", (char)i);
printf("This prints k:%d\n", k);
printf("This prints output of lower(i):%d\n", islower(i));
new = (p[i] - 97);
new += k;
//printf("%d\n", new %26 + 97);
//printf("i = |%c| is lowercase\n", i);
printf("%c\n", new % 26 + 97);
}
else {
//printf("%c", p[i] + (k % 26));
printf("This prints p:%s\n", p);
printf("This prints i:%d\n", (char)i);
printf("This prints k:%d\n", k);
printf("This prints output of lower(i):%d\n", islower(i));
new = (p[i] - 65);
new += k;
//printf("%d\n", new % 26 + 65);
//printf("i = |%c| is uppercase\n", i);
printf("%c\n", new % 26 + 65);
}
printf("\n");
}
輸出:
[email protected] (~/Dropbox/CS50x/pset2): ./caesar2 1
zZ < here is my input
This prints p:zZ
This prints i:0
This prints k:1
This prints output of lower(i):0
G < here is fails, lower case z should move to lower case a
This prints p:zZ
This prints i:1
This prints k:1
This prints output of lower(i):0
A < here is a success! upper case Z moves to upper case A
模運算符'%'具有比'+'更高的優先級。如果我是你,我會在'printf()'中使用圓括號。 –
我已經更新了,謝謝。 – JT1
我認爲reza的意思是(p [i] + k)%26。 – user1895961