m0_74153183 2022-10-11 23:21 采纳率: 95.5%
浏览 51
已结题

删去字符串,应该要把所有相同的字符删去,但是只删除了一个,应如何改进?

问题遇到的现象和发生背景

写一个函数squeeze(char s1[], char s2[]),它从字符串s1中删除所有出现在串s2里的字符,并保证不改变原字符串s1的先后顺序。

用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
void squeeze(char s1[], char s2[]);
int main()
{
    char str1[100], str2[100];
    gets(str1);
    gets(str2);
    squeeze(str1, str2);
    return 0;
}
void squeeze(char s1[], char s2[])
{
    int count= 0;
    int len1 =strlen(s1);
    int len2 = strlen(s2);
    for (int j= 0; j < len2; j++)
    {
        for (int i= 0; i< len1; i++)
        {
            if (s1[i] == s2[j]) {
                while (s1[i + 1])
                {
                    s1[i] = s1[i + 1];
                    i++;
                }
                s1[i] = '\0';
            }
        }
    }
    puts(s1);
}

运行结果及报错内容

img


应该要把所有相同的字符都删了,但是只删了一个

我的解答思路和尝试过的方法

应该如何解决呢?

我想要达到的结果

要删去所有相同的字符

  • 写回答

3条回答 默认 最新

  • lzl2040 人工智能领域新星创作者 2022-10-11 23:39
    关注

    需要注意删掉相同的字符后s1的长度是会变的,所以for循环的结束条件使用了s1[i] != '\0'
    同时,当我们删掉一个字符后,后面的字符往前面移动了,我们还需要进行i--,之前的s[i]是等于s[j]的,但是删除之后s[i]就是它后面一个字符了,这个时候我们就需要i--使得这个判断的字符不变
    同时在删除字符的时候我们不能移动i,因为i是在for循环上的变量,所以使用start

    #include<stdio.h>
    #include<string.h>
    void squeeze(char s1[], char s2[]);
    int main()
    {
        char str1[100], str2[100];
        gets(str1);
        gets(str2);
        squeeze(str1, str2);
        return 0;
    }
    void squeeze(char s1[], char s2[])
    {
        int count= 0;
        int len1 =strlen(s1);
        int len2 = strlen(s2);
        for (int j= 0; j < len2; j++)
        {
            for (int i = 0; s1[i] != '\0'; i++)
            {
                if (s1[i] == s2[j]) {
                    int start = i;
                    while (s1[start + 1] != '\0')
                    {
                        s1[start] = s1[start + 1];
                        start++;
                    }
                    s1[start] = '\0';
                    i--;
                }
            }
        }
        puts(s1);
    }
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月12日
  • 已采纳回答 10月11日
  • 创建了问题 10月11日

悬赏问题

  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂