按字母顺序移动单词中的字母

Shifting letters in a word alphabetically

我目前正在进行一个项目,涉及在单词中移动字母并进一步处理所有可能的结果。

它应该像这样工作: 例如:

helloworld ifmmpxpsme jgnnqyqtnf

...等等。 由于我是编程新手并且在这件事上很纠结,谁能给我一个关于如何成功管理的提示?我知道它不会那么困难,它可能与 ASCII 字母表示有关,但是,我不知道如何执行此操作。在此先感谢您的帮助。

您应该尝试阅读此 site,它非常清楚地显示了 ASCII table。

在 ASCII 中,每个字符都有自己的唯一值,例如 'T' 等于 84't' 等于 116。因此,如果我们将 +1 添加到它们,它将分别变为 'S''s' 并且相同的逻辑适用于 -1.

代码

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

static char *shift(const char *word)
{
    if (!word)
        return NULL;
    char *ptr = calloc(strlen(word) + 1, sizeof(char));
    if(!ptr)
        return NULL;
    for (size_t i = 0; word[i]; i++)
    {
        if (!isalpha(word[i]))
            return NULL;
        ptr[i] = word[i] + 1;
    }
    return ptr;
}

int main(void)
{
    char *word = shift("helloworld");
    while (word)
    {
        puts(word);
        word = shift(word);
    }
    return EXIT_SUCCESS;
}

输出:

ifmmpxpsme
jgnnqyqtnf
khoorzruog
lipps{svph