gpt4 book ai didi

c - 我无法向 char 数组添加偏移量,我从命令行接收字符串和整数的方法是最佳方法吗?

转载 作者:行者123 更新时间:2023-11-30 19:37:44 25 4
gpt4 key购买 nike

在第一个 for 循环中,我尝试向 char 数组添加偏移量,但无法这样做。

我还需要来自终端的输入,因此我编写了将 ** 转换为 argv[2] 的代码,并使用 atoi() 将 char 从 argv[1] 转换为 int。

int main(int argc, char *argv[]) {

if(argc != 3) {
printf("Enter an integer followed by a string \n\n");
return 1;
}

int i;
int offset = atoi(argv[1]);
char **p_message;
p_message = &argv[2];
char encrypt[strlen(*p_message)];

printf("You Entered: %d, %s \n", offset, *p_message);

for(i = 0; i < strlen(*p_message); i++)
{
encrypt[i] = ((*p_message[i] + offset) % 26);
}

for(i = 0; i < strlen(*p_message); i++)
{
printf("%c", encrypt[i]);
}


return 0;

}

最佳答案

主要问题是您没有在模数运算之前和之后进行字母表调整。我将变量 letter 添加为 int,这样算术就不会溢出。

您可以通过删除 **p_message 的一颗星来简化程序。另外,您通常会分配一个比字符串长 1 的数组,以允许使用 nul 终止符,但在这里,您不会将 char 数组视为字符串,因此不需要。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {

if(argc != 3) {
printf("Enter an integer followed by a string \n\n");
return 1;
}

int i;
int offset = atoi(argv[1]);
char *p_message; // remove a *
p_message = argv[2]; // remove &
char encrypt[strlen(p_message)]; // remove *
int letter; // added

printf("You Entered: %d, %s \n", offset, p_message); // remove *

for(i = 0; i < strlen(p_message); i++) { // remove *
letter = p_message[i]; // remove *
if(letter >= 'a' && letter <= 'z') { // if lower case
letter = 'a' + ((letter - 'a') + offset) % 26;
}
else if(letter >= 'A' && letter <= 'Z') { // if upper case
letter = 'A' + ((letter - 'A') + offset) % 26;
}
encrypt[i] = letter;
}

for(i = 0; i < strlen(p_message); i++) { // remove *
printf("%c", encrypt[i]);
}

return 0;
}

关于c - 我无法向 char 数组添加偏移量,我从命令行接收字符串和整数的方法是最佳方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com