首页 > 解决方案 > C - 如何更改字符

问题描述

我正在尝试在 C 中创建一个用户名生成器。基本上,用户键入他/她的名字,程序会根据它生成一个名字。它随着大小写、数字和符号的变化而变化。但是我找不到如何更改字符。就像,用户给出“Noone”,程序应该给出“N0one”,“N00ne”,“N00n3”,“noone”,“n0one”等。这是到目前为止的代码:

int main() {
    char name[150];
    char confirm[150];
    char tru[15]="y";
    char fals[15]="n";
    SetConsoleTitle("Username Generator");
    printf("Welcome to the username generator!\n");
    while (1==1) {
        printf("Type your name: ");
        fgets(name,15,stdin);
        printf("\nYour name is ");
        puts(name);

        printf("\nDo you confirm? ");
        fgets(confirm,15,stdin);

        if (strcmp(confirm,fals) == 0) {
            continue;
        }
        if (strcmp(confirm,tru) == 0) {
            printf(" \n Ok.");
            break;
        }
        else {
            printf("\ninvalid statement\n");
        }
    }
    printf("Do you want case randomise?\n");
    char csens[15];
    fgets(csens,15,stdin);
    if (strcmp(csens,tru) == 0){
        printf("\nOk");  
    }
    if (strcmp(csens,fals) == 0){
        printf("\nOk");  
    }
    printf("\nStarting to generate");
              //missing part
    printf("\nPress any button to exit");
    getchar();

}

标签: c

解决方案


C 的伪随机数生成器数量非常有限,但它仍然可用于您的用例。

简单地循环字符串,并生成一个随机的0or 1。如果0对当前角色不做任何事情;如果1然后检查当前字符是大写还是小写(使用例如isupperislower)并相应地更改字符大小写(使用touppertolower)。

如果要随机选择另一个字母或数字,则使用第一个数字作为选择器,看看是否应该更改字符,并在和之间生成第二个数字。if then 改变大小写,if to则转换为对应的数字,或者 if to则减法转换为对应的字母。0360110113610

您可以通过更改第一个数字的范围来轻松更改更改字符的机会的概率。例如,您可以生成一个介于03(包括)之间的数字,如果值等于 ,则修改字符0。然后你有四分之一的机会修改角色,而不是二分之一。

至于获取特定范围内的数字,如果您稍微搜索一下,互联网上有很多示例。


如果您想将一些(或所有)字符修改为外观相似字符(like'o''O'to '0'),类似于“leet code”,那么一个可能的解决方案是为您想要翻译的所有字符保留一个查找表。然后,如果您决定“更改”角色,则在当前角色的查找表中随机选择一个相似的角色。

这个查找表可以是一个结构数组,比如

struct
{
    int original;
    int leet;
} character_change_table[] = {
    { 'o', '0' },
    { 'e', '3' },
    // Etc.
};

推荐阅读