默享-唯静美 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 C++对比不同编码下相同字符串
  • ¥15 pyqt5设计界面控件之间的空白想消除
  • ¥15 想请教大家关于机器学习的问题
  • ¥15 虚幻UE保存Actor位置失败
  • ¥15 多个.nii合并为.nii.gz格式
  • ¥50 现在需要统计2023年全年 “签收时间(qssj)” 到 “提交时间(tjsj)” 小于半小时的业务量,但是要排除掉周末的时间,同时还要排除中午休息的时间。
  • ¥50 opencv模板匹配为何图像差别大仍然匹配数值高?
  • ¥15 如何成功完成主菜单和分菜单的代码编程C++
  • ¥15 怎样采集或者其它途径拿到全国最新个体工商户数据
  • ¥20 我是一名大学生,想学习java是自学还是报培训班呢