用循环实现:输入一个字符串,以回车符结束,将该字符串中每个字符进行移位加密后输出。

用循环实现:输入一个字符串,以回车符结束,将该字符串中每个字符进行移位加密后输出。

加密规则:每个字母往后移3位,x,y,z分别变成a,b,c,其他字母不变。


#include <stdio.h>

void encryptString(char* str) {
    int i = 0;
    char c;

    while (str[i] != '\0') {
        c = str[i];
        
        // 判断字符是否为字母
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
            // 对字母进行移位加密
            if (c >= 'x' && c <= 'z' || c >= 'X' && c <= 'Z') {
                c -= 23;  // 往前移3位
            } else {
                c += 3;  // 往后移3位
            }
        }

        printf("%c", c);
        i++;
    }
}

int main() {
    char str[100];
    
    printf("Enter a string: ");
    fgets(str, sizeof(str), stdin);

    printf("Encrypted string: ");
    encryptString(str);

    return 0;
}

使用encryptString函数对输入的字符串进行移位加密,然后在main函数中获取输入的字符串并调用encryptString函数进行加密输出。加密后的字符串会打印在屏幕上。注意使用fgets函数获取输入的字符串,可以确保读取包括空格在内的整行输入。
😼😼😼

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7672176
  • 这篇博客你也可以参考下:键盘输入一个字符,判断它是什么形式的字符
  • 除此之外, 这篇博客: [ C语言 ] 还不懂指针的一定要进来,带你初始指针,简单使用指针,它没有你想的那么难。中的  举例2:求字符串的长度 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

     在之前我们用strlen函数写了可以求字符串的长度

    //求字符串长度的函数 strlen
    #include <string.h>
    
    int My_strlen(char* s)
    {
    	int count = 0;
    	while(*s != '\0')
    	{
    		count++;
    		s++;
    	}
    	return count;
    
    }
    int main()
    {
    	char arr[] = "abc";
    	int len =My_strlen(arr);
    
    	printf("%d\n", len);
    	
    	return 0;
    }

    同样我们也可以使用指针减指针的方法

    int My_strlen(char* s)
    {
    
    	char* start = s;
    	while (*s != '\0')
    	{
    		s++;
    	}
    	return  s - start;
    }
    int main()
    {
    	char arr[] = "abc";
    	int len =My_strlen(arr);
    
    	printf("%d\n", len);
    	
    	return 0;
    }

    分析:

    int main()
    {
    	float a[5];
    	float* p;
    	for (p = &a[5]; p >= &a[0];)
    	{
    		*--p = 0;
    	}
    	return 0;
    }

     

    改进:

    	for (p = &a[4]; p >= &a[0]; p--)
    	{
    		*p = 0;
    	}

     

    标准规定:
    允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与
    指向第一个元素之前的那个内存位置的指针进行比较。

     

     指针 -- 地址
     数组 -- 一组相同类型的数据
    int main()
    {
    	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    	//arr首元素地址
    	int* p = arr;
    	int i = 0;
    	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    	{
    		printf("%p == %p \n", p + i,&arr[i]);
    	}
    
    
    	return 0;
    }

    分析:

     

    可见数组名和数组首元素的地址是一样的。
    结论:数组名表示的是数组首元素的地址
    那么这样写代码是可行的:
    int arr[10] = {1,2,3,4,5,6,7,8,9,0};
    int *p = arr;//p存放的是数组首元素的地址
    既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能。
    int main()
    {
    	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
    	int* p = arr; //指针存放数组首元素的地址
    	int sz = sizeof(arr) / sizeof(arr[0]);
    	int i = 0;
    	for (i = 0; i < sz; i++)
    	{
    		printf("&arr[%d] = %p   <====> p+%d = %p\n", i, &arr[i], i, p + i);
    	}
    	return 0;
    }

     所以 p+i 其实计算的是数组 arr 下标为i的地址

    指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
    这就是 二级指针
    int main()
    {
    	int a = 10;
    	int* pa = &a;
    	int** ppa = &pa; //ppa就是一个二级指针
    	**ppa = 20;
    	printf("%d\n",a);
    
    	return 0;
    }


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
#include <stdio.h>

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

int main() {
    char input[100];
    fgets(input, sizeof(input), stdin); 
    jm(input); 

    printf("%s", input);
    return 0;
}