C 将字符串中的一个字母替换为另一个字母
因此,在我完全学习C语言后,我将制作一个程序,将用户的密码保存在他们的计算机(本地)中,但将密码保存在本地是危险的,因为知道密码保存在哪里的人可以很容易地获得密码。我正在编写一个编码器,用特定的字母替换每个字母。(例如:'a'变成'1'),所以我在ideone.com上尝试了这个代码:(因为我不是在电脑附近,而是在智能手机附近)C 将字符串中的一个字母替换为另一个字母,c,C,因此,在我完全学习C语言后,我将制作一个程序,将用户的密码保存在他们的计算机(本地)中,但将密码保存在本地是危险的,因为知道密码保存在哪里的人可以很容易地获得密码。我正在编写一个编码器,用特定的字母替换每个字母。(例如:'a'变成'1'),所以我在ideone.com上尝试了这个代码:(因为我不是在电脑附近,而是在智能手机附近) #包括 int main(){ 字符输入; scanf(“%c”,&input); 编码(输入); printf(“%c”,输入); 返回0; } 无效编码(字符输入)
#包括
int main(){
字符输入;
scanf(“%c”,&input);
编码(输入);
printf(“%c”,输入);
返回0;
}
无效编码(字符输入){
字符a='a';
字符A='A';
a='1';
A='2';
}
如果我输入“aA”,它应该显示为“12”,但它当然只显示“a”,因为char只将第一个单词保存到变量中。我确实尝试在字符后使用[10],但我得到了错误,如果没有它,它只显示一个没有被替换的“a”。请尽快回答我。您的
编码方法根本无效。按值传递。这永远不会影响变量输入。它将显示给您的输入
您必须发送字符变量的地址。阅读你的方法有两个大问题
不要使用'void'将'int'用作'encode'返回类型。使用for循环将用户输入的所有值作为字符传递,并将返回的“int”值保存在“int”数组中。之后,您可以向用户显示该数组,说明密码已被编码或加密
您没有在encode函数的任何地方使用“char input”,因此没有任何更改
您需要扫描字符数组(使用%s和字符数组),然后根据映射循环替换字符。像这样:
#include <stdio.h>
/* Note we pass a pointer here, which gives access to the array... */
void encode(char *input)
{
int i;
/* Loop through until we hit the end-of-string character */
for (i=0; input[i] != '\0'; i++)
{
switch (input[i])
{
case 'a':
input[i] = '1';
break;
case 'A':
input[i] = '2';
break;
/* Add more mappings here, as required... */
default:
break;
}
}
}
int main()
{
/* Make sure this is big enough for your string... */
char input[10];
scanf("%s", input);
encode(input);
printf("%s", input);
return 0;
}
#包括
/*注意,我们在这里传递一个指针,它允许访问数组*/
无效编码(字符*输入)
{
int i;
/*循环直到到达字符串的末尾*/
对于(i=0;输入[i]!='\0';i++)
{
开关(输入[i])
{
案例“a”:
输入[i]=“1”;
打破
案例“A”:
输入[i]=“2”;
打破
/*根据需要在此处添加更多映射*/
违约:
打破
}
}
}
int main()
{
/*确保这个足够大,可以放你的绳子*/
字符输入[10];
扫描频率(“%s”,输入);
编码(输入);
printf(“%s”,输入);
返回0;
}
请注意,这里的“开关”仅在您有几个特定映射时才有用。如果您想以更灵活的方式翻译字符,您可能需要对字符的值进行某种数学运算-这方面的事情取决于您 “我完全学会了C”,真的吗?@alk如果你不知道我在说什么,我的英语很抱歉。你除了分配两个字符外,在编码方面什么都没做。如果删除main中的encode调用,将得到相同的结果。另一方面,printf(“%c”,…)
打印出1个字符,这就是%c的含义。如果你想打印一系列字符(例如一个单词),你应该改用%s
。另外:“请尽快回答我”在这里不会给你带来任何朋友!请注意,像您建议的那样的“单字母替换密码”非常弱,以至于在报纸上用于娱乐。作为密码的一种安全机制,它甚至没有注册为边缘安全。几乎不错。对于scanf()
格式,我鼓励使用“%9s”
,尤其是当缓冲区只有10个字节时。你打算如何扩展开关以覆盖整个字母表?@JonathanLeffler:扩展它是OP的一个练习-这只是试图将它们指向正确的方向!我很高兴你能给他们指出正确的方向;我也是。我在质疑switch语句是否是正确的方向。我想不是你的最新编辑肯定更好。@JonathanLeffler:同意,谢谢你的建议-我更新了我的帖子,表明切换解决方案远不是很多映射的理想解决方案。我不是说我想要将字母转换为ASCII字母,而是要将specifif单词,就像“a”转换为“v”。
#include <stdio.h>
/* Note we pass a pointer here, which gives access to the array... */
void encode(char *input)
{
int i;
/* Loop through until we hit the end-of-string character */
for (i=0; input[i] != '\0'; i++)
{
switch (input[i])
{
case 'a':
input[i] = '1';
break;
case 'A':
input[i] = '2';
break;
/* Add more mappings here, as required... */
default:
break;
}
}
}
int main()
{
/* Make sure this is big enough for your string... */
char input[10];
scanf("%s", input);
encode(input);
printf("%s", input);
return 0;
}