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

字符串的删除与排序

邹峰研 发布于 2020-04-24 21:30, 2768 次点击
【问题描述】

输入若干个字符串(每个字符串的长度不超过30个字符,字符串总数不超过30),和一个英文字符ch。 要求: - 删除每个字符串中的字符ch(区分大小写),得到新的字符串 - 将新的字符串按照字典逆序排序后输出

【输入形式】

第一行输入英文字符ch

每一行输入一个字符串

最后一行单独输入特殊字符@做为结束标志

【输出形式】

删除ch的新字符串按字典逆序输出

每行输出一个字符串

【样例输入】

e
shangejiao
fudean
teongji
shangcai
@
【样例输出】

tongji
shangjiao
shangcai
fudan

——————————这题我写了个for循环的代码,编译无问题,但是无法运行,而且很冗长。各位前辈有没有一些简便的方法或者代码赐教啊!——————————
5 回复
#2
r3169994432020-04-24 22:07
部分核心思路
while(*str++ != '\0')
{
  if(*str != 'e')
  {
     *str1++ = *str;
  }  
}
*str1 = '\0';
未调试,随写,勿喷!

[此贴子已经被作者于2020-4-24 22:19编辑过]

#3
吹水佬2020-04-25 06:49
对于在 s[30][31] 的 n 个字符串中删除字符ch
    char *p;
    for (i=0; i<n; ++i)
    {
        p = s[i];
        for (j=0,k=0; p[j]; ++j)
        {
            if (p[j] != ch)
                p[k++] = p[j];
        }
        p[k] = '\0';
    }

将新的字符串按照字典逆序排序
int cmp(const void *a , const void *b)
{
    return strcmp((char*)b, (char*)a);
}
......
qsort(s, n, sizeof(s[0]), cmp);

输出
for (i=0; i<n; ++i)
    printf("%s\n", s[i]);

#4
邹峰研2020-04-26 13:22
回复 3楼 吹水佬
这个大小写怎么区分啊
#5
邹峰研2020-04-26 13:40
回复 4楼 邹峰研
是我理解错了,谢谢你的回答!
#6
qw2202e2021-03-15 00:04
LZ可以发一下源文件吗???
1