字符串中字符排序:按照题目要求的输入输出样例编写,输入或粘贴程序代码,勿以附件形式提交代码文件。
【问题描述】
假定有两个由小写字母构成的字符串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在线代码测试工具