首页 > 其他分享 >华为OD机试C卷(100分)-字符串分割(二)(C语言)

华为OD机试C卷(100分)-字符串分割(二)(C语言)

时间:2024-06-16 14:03:22浏览次数:22  
标签:子串 int 12abc OD C语言 substring 小写字母 4aB 机试

题目描述

给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。

输入描述

输入为两行,第一行为参数K,第二行为字符串S。

输出描述

输出转换后的字符串。

用例

输入 3
12abc-abCABc-4aB@
输出 12abc-abc-ABC-4aB-@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,

后面的子串每3个字符一组为abC、ABc、4aB、@,

abC中小写字母较多,转换为abc,

ABc中大写字母较多,转换为ABC,

4aB中大小写字母都为1个,不做转换,

@中没有字母,连起来即12abc-abc-ABC-4aB-@

输入 12
12abc-abCABc-4aB@
输出 12abc-abCABc4aB@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,

后面的子串每12个字符一组为abCABc4aB@,

这个子串中大小写字母都为4个,不做转换,

连起来即12abc-abCABc4aB@

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

void convertSubstring(char *substring) {
    int upperCount = 0, lowerCount = 0;
    int length = strlen(substring);

    for (int i = 0; i < length; i++) {
        if (isupper(substring[i])) {
            upperCount++;
        } else if (islower(substring[i])) {
            lowerCount++;
        }
    }

    if (upperCount > lowerCount) {
        for (int i = 0; i < length; i++) {
            if (islower(substring[i])) {
                substring[i] = toupper(substring[i]);
            }
        }
    } else if (lowerCount > upperCount) {
        for (int i = 0; i < length; i++) {
            if (isupper(substring[i])) {
                substring[i] = tolower(substring[i]);
            }
        }
    }
}

int main() {
    int K;
    char S[1000];
    scanf("%d", &K);
    scanf("%s", S);

    int length = strlen(S);
    int count = 0;
    int start = 0;
    char newString[1000] = "";

    for (int i = 0; i < length; i++) {
        if (S[i] == '-' && count > 0) {//去掉“-”,存储剩下子串
            strncat(newString, S + start, i - start);//一个子串
            start = i + 1;
        } else {
            count++;
        }
    }

    strncat(newString, S + start, length - start);

    int newLength = strlen(newString);


      int firstDashIndex = strcspn(S, "-");
    printf("%.*s", firstDashIndex, S);

    for (int i = firstDashIndex; i < newLength; i += K) {
          char substring[1000] = "";
        strncpy(substring, newString + i, K);//按每k个字符分割字符串
        convertSubstring(substring);//转换大小写
        printf("-%s", substring);
    }

    printf("\n");

    return 0;
}

标签:子串,int,12abc,OD,C语言,substring,小写字母,4aB,机试
From: https://blog.csdn.net/qq_45721938/article/details/139719461

相关文章

  • 华为OD机试C卷(100分)-连续字母长度(C语言)
    题目描述给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第k长的子串的长度,相同字母只取最长的那个子串。输入描述第一行有一个子串(1<长度<=100),只包含大写字母。第二行为k的值输出描述输出连续出现次数第k多的字母的次数。用例输入AAAAHHHBBCDHHH......
  • CodeForces 1935A
    题目链接:EntertainmentinMAC思路代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e5+10;voidsolve(){lln;strings;cin>>n>>s;intl=0,len=s.size();while(s[l]==s[......
  • 华为OD刷题C卷 - 每日刷题33(小华最多能得到多少克黄金,智能成绩表)
    1、(小华最多能得到多少克黄金):这段代码是解决“小华最多能得到多少克黄金”的问题。它提供了一个Java类Main,其中包含main方法和dfs方法,以及辅助变量和getDigitSum方法,用于计算小华在地图上能收集到的最多黄金数量。main方法首先读取地图的行数m、列数n和数位之和阈值k。然......
  • 华为OD刷题C卷 - 每日刷题32(执行任务赚积分,计算三叉搜索树的高度)
    1、(执行任务赚积分):这段代码是解决“执行任务赚积分”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于计算在有限的时间内,处理任务可以获得的最多积分。main方法首先读取任务数量n和可用于处理任务的时间t,然后读取每个任务的最晚处理时间限制和积分值,......
  • 华为OD刷题C卷 - 每日刷题31(园区参观路径,围棋的气)
    1、(园区参观路径):这段代码是解决“园区参观路径”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个未使用的dfs方法,用于计算从园区起点到终点的不同参观路径数量。main方法首先读取园区的长和宽,然后读取园区的布局信息,其中0表示可以参观,1表示不能参......
  • 华为OD刷题C卷 - 每日刷题30(小明找位置,分隔均衡字符串)
    1、(小明找位置):这段代码是解决“小明找位置”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于帮助小明快速找到他在排队中应该站的位置。main方法首先读取已排列好的小朋友的学号数组和小明的学号,然后调用getResult方法并打印小明应该站的位置。getRe......
  • Android Media Framework(五)Tunnel Mode
    本篇将聚焦AndroidTunnelMode,详细解析组件之间隧道连接过程、数据传递过程、组件销毁过程。通过阅读本篇内容,我们应能对tunneled组件的连接过程和buffer分配过程有所了解。1、TunnelMode介绍ILSpec详细描述了TunnelComponent的实现方式,但内容较为晦涩难懂,网上相关......
  • 华为余承东:全场景代码智能生成工具CodeArts snap正式发布,码力遥遥领先
    野心让人勤奋节制让人枯萎   前几天的端午节,华为发布了新一代代码智能生成工具codeartssnap。可以一键生成高效代码,精准解决技术难题,让你像技术大牛一样轻松完成业务开发。  下面来看看它是如何码力全开的。 第一个,通过注释一键生成代码如下,当你写好代码的注......
  • 【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water
    欢迎收藏Star我的MachineLearningBlog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star,有问题可以随时与我交流,谢谢大家!链接:11-盛最多水的容器直觉这个问题可以通过可视化图表来理解和解决。通过图形化这个问题,可以简化解决过程。......
  • 【LeetCode最详尽解答】15-三数之和 3sum
    欢迎收藏Star我的MachineLearningBlog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star,有问题可以随时与我交流,谢谢大家!链接:15-三数之和直觉示例:输入:nums=[-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[......