C练题笔记之:牛客-HJ025.数据分类处理

该篇博客详细解析了一段C语言代码,该代码实现了一个功能,即根据特定规则对输入字符串中的字符进行排序:英文字母按A到Z排序,保留原始顺序的大小写,非字母字符保持原位。博主提供了解题思路和完整代码,适用于理解字符串处理和排序算法。
摘要由CSDN通过智能技术生成

题目:

描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。
 

如,输入: By?e 输出: Be?y

注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)

输入描述:

输入字符串

输出描述:

输出字符串

示例1

输入:

A Famous Saying: Much Ado About Nothing (2012/8).

复制输出:

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

复制

结果:

解题思路:

1,获取一行所有数据记录到str

2,创建一个和一行字符长度相同的数组,用于存放输出的数组。

3,从字母A还是循环数组str,当str为符号的时候不做判断继续循环,当str中的数组要么是A要么是a就录入out表。

4,录入out标中的时候先确定out表的下表index处是否正好是符号,从而保证符号所在位置不变。

5,退出循环的两个条件,1,26个字母判断完;2,index存完了。

6,当是第一个情况出来的时候,有可能后面还有字符没有存到out标中。因此需要循环复制str表最后的部分到out中。

代码:

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

int main() {
    char str[1024] = {};
    int count;
    while(gets(str) != NULL) {
        int len = strlen(str);
        int index = 0;
        char *out = (char *)malloc(sizeof(char) * (len + 1));
        for(int i = 0; i < 26; i++) {
            for(int j = 0; j < len; j++) {
                if(str[j] < 'A' || (str[j] > 'Z' && str[j] < 'a') || str[j] > 'z') continue;
                if(str[j] == 'A' + i || str[j] == 'a' + i) {
                    while(str[index] < 'A' || (str[index] > 'Z' && str[index] < 'a') || str[index] > 'z'){
                        out[index] = str[index];
                        index++;
                    }
                    out[index++] = str[j];
                }
                if(index == len) break;
            }
            if(index == len) break;
        }
        while(index < len) {
            out[index] = str[index];
            index++;
        }
        printf("%s\n", out);
        free(out);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值