m0_71469623 2022-07-14 20:50 采纳率: 89.5%
浏览 46

ascii 字母字符串移动n位

输入文字列(最大64个文字)和大于等于-100小于等于100的数字n,输出把原字符串按字母表移动n次的字符串。
输入的n不是数字时,输出 not number;
输出的n小于-100时 输出 -101 or less;
输出的n大于100时,输出 101 or more;
(文字列内除字母外的其他数字、字符不变,大写字母小写字母不互换,z右移一位为a)

#include <stdio.h>

int main(void){

char str[200]={'\0'};
int n;
gets(str);
int r = scanf("%d",&n);

if(r!=1){
    printf("Input Error : not number");
    return 0;
}

if(n<-100){
    printf("Input Error : -101 or less");
    return 0;
}

if(n>100){
    printf("Input Error : 101 or more");
    return 0;
}

int i=0;
while(str[i]!='\0'){
    
    if(str[i]>='A'&&str[i]<='Z'){
        str[i] = ((str[i]+ (n%26)) -'A') %26 + 'A';
    }
    if(str[i]>='a'&&str[i]<='z'){ 
        str[i] = ((str[i]+ (n%26)) -'a') %26 + 'a';
    }
    i++;     
}

printf("%s",str); 

return 0;

}

想问一下这段程序为什么test case会部分error,求问应该怎么修改,或者有什么其他写法吗?谢谢。

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-07-14 21:53
    关注

    printf("Input Error : not number"); 修改为: printf("not number");
    printf("Input Error : -101 or less"); 修改为: printf(" -101 or less");
    printf("Input Error : 101 or more"); 修改为:printf("101 or more");
    其它没发现有问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月14日