解题思路:

    题目的意思就是让这些字符向后移一位就可以了,边界z向后移动一位就是重新开始这个循环,也就是重新重a开始


    a[i] = (a[i] - 'a') % 26 + 'a';

    这句代码的意思就是,通过取模的方式来知道,它是26个字母中的第几位,在加上一个'a'就变成了原来的数了

    而可以进一步改进成这个样子:

    a[i] = (a[i] - 'a' + 1) % 26 + 'a';

    这样表示的是 a[i] - 'a' 先向前移动 一位 然后在 取模 ,这样的话取模的结果就是已经移动一位后的结果了,之后再加'a',就变了'a'移动一位后的结果了



注意事项:

参考代码:

#include <stdio.h>
#include <string.h>
void fun(char a[])//向后移动一位
{
    for (int i = 0; i < strlen(a); i++)
        if (a[i] >= 'a' && a[i] <= 'z')
            a[i] = (a[i] - 'a' + 1) % 26 + 'a';
        else if (a[i] >= 'A' && a[i] <= 'Z')
            a[i] = (a[i] - 'A' + 1) % 26 + 'A';
}

int main()
{
    char a[101];
    gets(a);
    fun(a);
    puts(a);
    return 0;
}


点赞(0)
 

0.0分

40 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 34 条评论

吴瑶华 2月前 回复TA
@小熊伸了个懒腰 while ((ch = getchar()) != &#039;\n&#039;)是去读取字符,如果输入的数据量大,遇到换行符就跳出了,有局限性,while ((ch = getchar()) != EOF直到文件结束,数据可以一直读取输出直到结束
crj 9月前 回复TA
int main()
{
    char arr[101] = { 0 };
    gets(arr);
    for (int i = 0; arr[i]; i++)
    {
        if (arr[i] >= 'a' & arr[i] < 'z')
            putchar(arr[i] + 1);
        else if (arr[i] == 'z')
            putchar('a');
        else
            putchar(arr[i]);
    }
    return 0;
}
隐世 11月前 回复TA
#include<stdio.h>
#include<string.h>
 
void enery(char arr[])
{
    int len = strlen(arr);
    int i = 0;
    for (i = 0; i <= len; i++)
    {
        if (arr[i] >= 'a' && arr[i] <= 'y')
            arr[i] += 1;
        else if (arr[i] == 'z')
            arr[i] -= 25;
    }
}
int main()
{
    char arr[1000] = { 0 };
    gets(arr);
    enery(arr);
    printf("%s\n", arr);
 
    return 0;
}
Long poem 1年前 回复TA
#include<stdio.h>
int main()
{
	char array[2];
	for(int i=0;i<2;i++){
	scanf("%c",&array[i]);
	getchar();
}
	for(int i=0;i<2;i++){
		if(array[i]>='A'&&array[i]<='Z'){
		array[i]=(array[i]+1-'A')%26+'A';}
			else if(array[i]>='a'&&array[i]<='z'){
			array[i]=(array[i]+1-'a')%26+'a';	
			}
			printf("%c ",array[i]);
		}
	return 0;
}
大佬,最后多了一个空,怎么解决
ljkdsb 1年前 回复TA
@小熊伸了个懒腰 #include<stdio.h> int main() { 	char a[100]={0}; 	gets(a); 	int i=0; 	while(a[i]!=0) 	{ 	a[i]=a[i]+1; 		i++; 		if(a[i]==&#039;z&#039;) 		a[i]=a[i]-26; 	} puts(a); 	return 0; }
希留格拉雷特 1年前 回复TA
@外物 他可能理解成了大写Z转小写a
悠游 1年前 回复TA
@Kohler z是变成a,你没写撒
Kohler 1年前 回复TA
#include <stdio.h>
#include <string.h>
int main(){
	char str[20];
	scanf("%s",str);
	int len = strlen(str);
	int i = 0;
	for(i = 0;i < len;i++){
		if(str[i]>='a' && str[i] <= 'z'){
			str[i]++;
		}
	}
	printf("%s",str);
	return 0;
}
我这个为啥错了
长风 1年前 回复TA
@外物 到z的时候就不对了
如果我是低阶你会爱我吗 1年前 回复TA
@外物 z+1就成括号了