密钥格式化-C语言

版权声明:所有分享的源代码仅供学习使用,欢迎分享转载,请注明出处 https://blog.csdn.net/weixin_43328024/article/details/84765020

密钥格式化

题目
给定一个密钥字符串S,只包含字母,数字以及 ‘-’(破折号)。N 个 ‘-’ 将字符串分成了 N+1 组。给定一个数字 K,重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符,第一个分组至少要包含 1 个字符。两个分组之间用 ‘-’(破折号)隔开,并且将所有的小写字母转换为大写字母。
给定非空字符串 S 和数字 K,按照上面描述的规则进行格式化。
示例:
1.输入:S = “5F3Z-2e-9-w”, K = 4
输出:“5F3Z-2E9W”
解释:字符串 S 被分成了两个部分,每部分 4 个字符;
注意,两个额外的破折号需要删掉。
2.输入:S = “2-5g-3-J”, K = 2
输出:“2-5G-3J”
解释:字符串S被分成了3个部分,按照前面的规则描述,第一部分的字符可以少于给定的数量,其余部分皆为 2 个字符。

代码分享:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
    char array1[N] = "\0";
    char array2[N] = "\0";
    char array3[N] = "\0";
    int i = 0;
    int j = 0;
    int m = 0;      //字符串中除去‘-’剩下的字符个数
    int K;          //密钥
    printf("请输入一串字符:\n");
    gets(array1);
    printf("请输入密钥K:\n");
    scanf("%d", &K);
    //删掉数组1中的‘-’, 并将其存储到数组2
    for(i = 0; array1[i] != '\0'; i++)//循环录入用户输入的字符串
    {
        if(array1[i] != '-')
        {
            array2[j] = array1[i];//将用户录入的字符串删除-后存储至array2
            j++;
        }
    }
    m = strlen(array2);     //计算数字符串组中字符的个数
    //将数组2中的数据逆向存储到数组3,方便对其添加‘-’
    for(i = 0, j = m - 1; j >= 0; j--, i++)//利用循环将array2反向存储至array3
    {
        array3[i] = array2[j];
    }
    //利用对密钥K取余,对数组3进行添加‘-’操作
    for(i = 0; i < N; i++)
    {
        if(i % (K + 1) == 0 )
        {
            for(j = N; j != (i - 1); j--)
            {
                array3[j + 1] = array3[j];
            }
                array3[i] = '-';
        }
    }
    m = strlen(array3);
    //若末元素为破折号,则删去
    if(array3[m - 1] == '-')
    {
        array3[m - 1] = "\0";
        m = m - 1;
    }
    //将数组3逆向输出,就是对数组1操作的结果
    printf("格式化后的结果是:\n");
    for(i = m - 1; i >= 1; i--)//利用ASCAII码进行大小写变换
    {
        if(array3[i] >= 'a' && array3[i] <= 'z')
            {
                printf("%c", array3[i] - 32);
                }
        else
            printf("%c", array3[i]);
    }
    return 0;
}

运行结果:
在这里插入图片描述

以上是关于密钥格式化用C语言的一种解决方案,希望对大家有帮助,也希望大佬评论一些自己的建议。

猜你喜欢

转载自blog.csdn.net/weixin_43328024/article/details/84765020