字符串由用户输入。然后程序将通过输入移动单词中的字符串。问题是,每当它试图转移z时,都会有标点符号。如何克服这个问题?
printf("Enter text : ");
scanf("%s",&plaint);
printf("Enter shift amount : ");
scanf("%d",&shif);
for(int j=0; plaint[j] != '\0'; j++)
{
plaint[j]=plaint[j]+shif;
}
答案 0 :(得分:1)
正如您在Z
和z
之后的ASCII code chart中看到的那样,有标点符号。从z跳转到使用模运算(%
)。例如:
char plaint[101];
int shif;
printf("Enter text : ");
scanf("%100s",plaint);
printf("Enter shift amount : ");
scanf("%d",&shif);
for(int j=0; plaint[j] != '\0'; j++) {
if( plaint[j] >= 'A' && plaint[j] <= 'Z' )
plaint[j] = (plaint[j] -'A' + shif) % 26 + 'A';
if( plaint[j] >= 'a' && plaint[j] <= 'z' )
plaint[j] = (plaint[j] -'a' + shif) % 26 + 'a';
if( plaint[j] >= '0' && plaint[j] <= '9' )
plaint[j] = (plaint[j] -'0' + shif) % 10 + '0';
}
这将仅移动字母和数字,并绕过z和9.首先我将字母移动到数值范围0-25,数字移动到0-9,然后添加移位并使用模数,然后通过添加'a'
(97),'A'
(65)或'0'
(48)移回ASCII图表中的原始位置。
不会更改Puncutations和其他字符。