将字符串中的字母替换为另一个字母

时间:2013-11-08 07:18:16

标签: c

因此,在我完全学习C之后,我将制作一个程序,将用户的密码保存在他们的计算机(本地)中,但在本地保存密码是危险的,因为知道密码保存在哪里的人可以获得密码很容易我想编码一个编码器,用一个特定的字母替换每个字母。 (示例:'a'变为'1')所以我在ideone.com上尝试了代码:(因为我不在我的电脑附近,而是智能手机)

#include <stdio.h>

int main() {
    char input;

    scanf("%c", &input);
    encode(input);
    printf("%c", input);

    return 0;
}

void encode(char input) {
    char a = 'a';
    char A = 'A';

    a = '1';
    A = '2';
}

如果我输入“aA”,它应显示为“12”,但当然它只显示'a',因为char只将第一个单词保存到变量中。我确实在char之后尝试使用[10]但是我得到了错误,没有它它只显示一个没有被替换的'a'。请尽快回答我。

3 个答案:

答案 0 :(得分:2)

你的方法有两大问题。

  1. 不要使用'void'使用'int'作为'encode'返回类型。使用for循环将用户输入的所有值作为字符传递,并将返回的'int'值保存在'int'数组中。之后,您可以向用户显示该密码已编码或加密的数组。
  2. 你没有在编码功能的任何地方使用'char input',因此没有任何改变。

答案 1 :(得分:2)

您需要扫描一个字符数组(使用%s和一个char数组),然后根据您的映射循环替换字符。像这样:

#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;
}

请注意,此处的“切换”仅在您具有一些特定映射时才有用。如果你想以更灵活的方式翻译字符,你可能想对char的值进行某种数学运算 - 这方面的事情取决于你!

答案 2 :(得分:1)

您的encode方法根本没有效果。通过价值传递。这永远不会影响变量输入。它会显示您给出的输入。

您必须发送字符变量的地址。阅读Pass by reference