默享-唯静美 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 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置