在C中移动单词时跳过标点符号字符

时间:2016-04-01 03:40:13

标签: c arrays char shift

字符串由用户输入。然后程序将通过输入移动单词中的字符串。问题是,每当它试图转移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;
}

1 个答案:

答案 0 :(得分:1)

正如您在Zz之后的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和其他字符。