yolo0616 2021-07-16 16:53 采纳率: 100%
浏览 82
已采纳

合并两个字符串 重复的字符只输出一次 并且按照asii码排序

include<stdio.h>

include<string.h>

void sort(char *p1,char *p2,char p3[])
{
int i=0;
while(*p1!='\0')
{
p3[i]=*p1;
p1++;
i++;
}
p3[i]='\0';

我现在的问题是这里怎么不重复的合并p2的字符到p3

for(i=0;i<strlen(p3)-1;i++)
for(int j=0;j<strlen(p3)-1-i;j++)
{
if(p3[j]>p3[j+1])
{
char t=p3[j+1];
p3[j+1]=p3[j];
p3[j]=t;
}
}
}
int main(void)
{
char str1[100],str2[100],str3[100];
printf("input str a and b:\n");
gets(str1);
gets(str2);
sort(str1,str2,str3);
puts(str3);
return 0;
}

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-07-16 17:14
    关注

    代码如下:

    void sort(char *p1,char *p2,char p3[])
    {
        int i=0,j,k;
        char ch;
        //p1全部拷贝
        while(*p1!='\0')
        {
            p3[i]=*p1;
            p1++;
            i++;
        }
        //p2-->p3
        while(*p2 != '\0')
        {
            for(j = 0;j<i;j++)
            {
                if(p3[j] == *p2)
                    break;
            }
            if(j== i)
                p3[i++] = *p2;
            
            p2++;
        }
        p3[i] = '\0';
    
        //排序
        for (k = 0;k<i-1;k++)
        {
            for(j=0;j<i-1-k;j++)
            {
                if(p3[j] > p3[j+1])
                {
                    ch = p3[j];
                    p3[j] = p3[j+1];
                    p3[j+1] = ch;
                }
            }
        }
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月17日
  • 创建了问题 7月16日

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办