【C语言练习】字符串合并排序

字符串中字符排序:按照题目要求的输入输出样例编写,输入或粘贴程序代码,勿以附件形式提交代码文件。

【问题描述】

假定有两个由小写字母构成的字符串str_1、str_2,编写程序,将两个字符串合并至str_1中(不使用strcat库函数),并按字符ASCI码值从小到大进行排序。

【输入输出样例】

样例样例格式说明
ilove输入的第一个字符串str_1
sdju输入的第二个字符串str_2
deijlosuv合并排序后输出的字符串
第一种思路:

先得出字符串str_1的长度,然后在后面接上str_2,满足第一步,合并到str_1,然后使用冒泡法,对字符串str_1排序,最后输出,详细代码如下:

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

int main(void){
    char str_1[20], str_2[20], str_3[50];
    int i, j;
    scanf("%s %s", str_1, str_2);
    // str_2 合并到str_1
    for(i=0;str_1[i]!='\0';i++);
    for(j=0;str_2[j]!='\0';j++){
        str_1[i++] = str_2[j];
    }
    str_1[i] = '\0';

    // 冒泡法排序
    int n = i - 1;
    char buf;
    for(i=0; i<n; i++){
        for(j=0; j<n-i; j++){
            if(str_1[j]>str_1[j+1]){
                buf = str_1[j];
                str_1[j] = str_1[j+1];
                str_1[j+1] = buf;
            }
        }
    }
    puts(str_1);
}
【运行结果展示】

运行结果展示
测试工具
php在线代码测试工具

第二种思路

【针对问题要求来说不满足,但是这也是一种思路】:
把常用的字符串按顺序排出来,然后在这个里面挨着遍历,遇到我们需要合并的字符串,就取出来,不然的话跳过该字符。详细代码如下:

#include <stdio.h>
#include <string.h>
 
const char *s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int main(void)
{
    char str_1[20], str_2[20], str_3[50];
    int i, j;
    scanf("%s %s", str_1, str_2);
 
    for (i = 0, j = 0; i < strlen(s); i++) {
        char tmp[2] = {s[i], 0};
        if (strstr(str_2, tmp) || strstr(str_1, tmp)) {
            str_3[j++] = tmp[0];
        }
    }
    str_3[--j] = '\0';
    puts(str_3);
    return 0;
}
【运行结果展示】

运行结果
测试工具
php在线代码测试工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远方_流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值