注册 登录
编程论坛 C语言论坛

从键盘输入一个字符串a,并在串a中的最大元素后面插入字符串b(b[]=“ab”),输出字符串a, 解题思路

寜吖 发布于 2020-03-27 11:33, 4521 次点击
13 回复
#2
叶纤2020-03-27 11:49
strcat()这个函数你看看资料
#3
forever742020-03-27 12:13
还有strcpy()
有备无患哦
#4
lin51616782020-03-27 15:22
查找最大元素
strcat(b 最大元素下标+1)
strcat(a b)
puts a
#5
forever742020-03-27 15:35
那块儿特意写了b那样初始化,我有点怕它不够长...
#6
lin51616782020-03-27 15:37
那就准备一个 数组c 存b和a后缀
#7
forever742020-03-27 15:39
嗯,我也是这么想的。
#8
纯蓝之刃2020-03-27 16:17
程序代码:
#include<stdio.h>
#include<string.h>

int cmpfunc (const void * a, const void * b)
{
   return ( *(char*)b - *(char*)a );
}

int main( )
{
    //char a[20]="rghnycghyjk",b[]="ab",c[25];
    char a[20],b[]="ab",c[25];
    char *ret;

    puts(a);
    //puts(b);

    memcpy(c,a,sizeof(a));
    qsort(c, strlen(c), sizeof(char), cmpfunc);

    //printf("c=%s\n",c);
    ret=strchr(a,c[0]);
    strcpy(c,ret+1);
    strcpy(ret+1,b);
    strcpy(ret+1+strlen(b),c);

    printf("a=%s\n",a);

    return 0;
}
#9
lin51616782020-03-27 16:21
以下是引用纯蓝之刃在2020-3-27 16:17:27的发言:

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

int cmpfunc (const void * a, const void * b)
{
   return ( *(char*)b - *(char*)a );
}

int main( )
{
    //char a[20]="rghnycghyjk",b[]="ab",c[25];
    char a[20],b[]="ab",c[25];
    char *ret;

    puts(a);
    //puts(b);

    memcpy(c,a,sizeof(a));
    qsort(c, strlen(c), sizeof(char), cmpfunc);

    //printf("c=%s\n",c);
    ret=strchr(a,c[0]);
    strcpy(c,ret+1);
    strcpy(ret+1,b);
    strcpy(ret+1+strlen(b),c);

    printf("a=%s\n",a);

    return 0;
}

查找最大值 用排序处理 太笨重了
直接写也只是 O(n) 复杂度
qsort O(nlogn) 不值得

#10
lin51616782020-03-27 17:05
另外 有疑问
是否同时存在多个最大值
如果存在多个最大值怎么插入
插入第一个最大值
插入最后一个最大值
插入每一个最大值 ??
#11
叶纤2020-03-27 17:26
回复 楼主 寜吖
楼主你的最大元素有争论,
您是指元素中的最大下标
还是元素中的最大值呢?
#12
纯蓝之刃2020-03-27 21:26
回复 10楼 lin5161678
同时存在多个最大值
在第一个最大值后插入数据,strchr函数是从前往后遍历的,返回的是第一个最大值的地址。
#13
lin51616782020-03-27 23:27
以下是引用纯蓝之刃在2020-3-27 21:26:32的发言:

同时存在多个最大值
在第一个最大值后插入数据,strchr函数是从前往后遍历的,返回的是第一个最大值的地址。

这里应该用不了 strchr函数
#14
寜吖2020-03-29 10:13
回复 10楼 lin5161678
或许只有唯一最大值
1