用循环实现:输入一个字符串,以回车符结束,将该字符串中每个字符进行移位加密后输出。
加密规则:每个字母往后移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函数获取输入的字符串,可以确保读取包括空格在内的整行输入。
😼😼😼
在之前我们用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;
}