按字母顺序移动单词中的字母
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
我目前正在进行一个项目,涉及在单词中移动字母并进一步处理所有可能的结果。
它应该像这样工作: 例如:
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