默享-唯静美 2019-07-24 13:53 采纳率: 33.3%
浏览 241
已采纳

自己写了一个程序但总是有问题,麻烦大家帮我找找错

题目:输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。
以下是我的代码:

#include<stdlib.h>
#include<string.h>
#define maxn 11000
char s[maxn], t[maxn];
int p[maxn];
int main()
{
    int lens, lent;
    scanf_s("%s", s, maxn);
    scanf_s("%s", t, maxn);
    lens = strlen(s);
    lent = strlen(t);
    int flag = 1, flag1 = 0, flag2 = 0;/*我的基本思路就是分以下三种情况考虑*/
    if (lens > lent)printf("can not");
    if (lens == lent)
    {
        for (int i = 0;i < lens;i++)
        {
            if (s[i] != t[i]) { flag = 0; break; }
            else flag = 1;
        }
        if (flag)printf("can");
        else printf("can not");
    }
    if (lens < lent)
    {
        for (int i = 0;i < lens;i++)
        {
            for (int k = 0;k < lent;k++)
            {
                if (s[i] == t[k])
                {
                    flag1 = 1;
                    break;
                }
                else flag1 = 0;
            }
            if (!flag1)
            {
                printf("can not");
                system("pause");
                return 0;
            }
        }
        if (flag1)/*如果s中的字符都能在t中找到,重字符按重数算*/
        {
            int j = 0;
            for (int x = 0;x < lens;x++)
            {
                for (int y = 0;y < lent;y++)
                {
                    if (s[x] == t[y])
                    {
                        p[j] = y;
                        break;
                    }
                }
                j++;
            }
            for (j = 0;p[j];j++)
            {
                if (p[j] < p[j + 1])/*如果符合那么数组p中的数就应该从小到大排列*/
                    flag2 = 1;
                else
                {
                    flag2 = 0;break;
                }
            }
            if (flag2)printf("can ");
            else printf("can not");
        }
    }
    system("pause");
    return 0;
}

  • 写回答

1条回答 默认 最新

  • fg6677 2019-07-24 14:37
    关注
        for (int i = 0;i < lens;i++)
        {
            for (int k = 0;k < lent;k++)
    
                    ^   ^这里k不赋初值
    

    int k=0;放到for (i 之前

    一次过 后面的代码不需要了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵