C 循环遍历一个小数组并添加到一个大数组

标签 c arrays string loops

我第一次来这里,我是一名编程新手,我遇到了一个问题,找不到任何解决方案。 我正在编写一个代码来进行维吉尼亚密码,但我遇到了问题:

首先:要输入Key,假设key是; “啊啊”

第二:要加密的文本,假设文本是:“alligator”

密码应该是:

鳄鱼

+

aaa|aaa|aaa(重新运行文本中每个额外字母的键 vs 键)

一个 + A 加密的第一个字母;

所有文字:

bmmjhbups

我的问题是如何用较短的 abc 循环遍历 alligator?在我所有的尝试中,当循环传递它时,abc 变为零,而不是当文本循环传递 abc 的长度时从头开始。 我还尝试过使用 strcpy 和连接,以便 abc 在 alligator 处变得相同的 strlength,但由于字符串乞求中的奇怪符号,我在 strcpy 和 cat 方法中遇到了问题。 关于循环如何通过更大的循环工作,是否有一个简单的解决方案?

最佳答案

虽然我可能不应该发布此内容(因为没有提供代码示例),但这里有一段代码可以满足您的需求。不过,有几个想法:

  • 根据Vigenere wiki ,每个字母都有一个与之关联的数字:

    • a .. 0
    • b .. 1
    • ...
    • z .. 25

    当添加 2 个字母时,它们的值会被添加,然后将 % 26(模)应用于结果。例如。 'a' + 'a' = (0 + 0) % 26 = 0 也是 a (与 b 您所期望的),这就是为什么我必须添加 CUSTOM_OFFSET 将表中的每个结果(向前)移动 1。

  • 密码适用于大写或小写字母,而不适用于两者(或任何其他字符)。也许可以添加一些textkey验证例程。无论如何,在这种情况下,都使用小写。

代码:

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

#define BASE_CHR 'a'  //Change it to 'A' if working with uppercases (can't have both)
#define ALPHABET_LEN ('z' - 'a' + 1)

#define CUSTOM_OFFSET 1  //According to specs should be 0, but it wouldn't match the current requirements

int main() {
    char *text = "alligator", *key = "aaa", *new_text = NULL;
    size_t text_len = strlen(text), key_len = strlen(key), i = 0;
    if ((new_text = (char*)calloc(text_len + 1, sizeof(char))) == NULL) {
        printf("Malloc error\n");
        return 1;
    }
    for (i = 0; i < text_len; i++)
        new_text[i] = ((text[i] - BASE_CHR + key[i % key_len] - BASE_CHR + CUSTOM_OFFSET) % ALPHABET_LEN) + BASE_CHR;
    printf("Text: %s,  Key: %s,  Crypted: %s\n", text, key, new_text);
    free(new_text);
    new_text = NULL;
    return 0;
}

输出:

Text: alligator, Key: aaa, Crypted: bmmjhbups

关于C 循环遍历一个小数组并添加到一个大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37789451/

相关文章:

java - 如何从java中读取字节数组中的数据

jquery - 获取href值,存储在变量中并删除http ://

c - C 中链表的逻辑错误

python - 将文件内容存储在缓冲区中并将其分配给 Python 中的指针

php - PHP中的特殊随机算法

c# - 为什么编译器无法推断对象数组类型?

python - 如何在 Python 3 中查找字符串中的重复项?

c - 队列结构在被调用一次后丢失元素值

c++ - 为什么首选 uint32_t 而不是 uint_fast32_t?

c - 如何在 Windows 上安装 GTK+ 3.0?