默享-唯静美 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 之前

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

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

报告相同问题?

悬赏问题

  • ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
  • ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
  • ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
  • ¥15 husky+kinova jaco2 仿真
  • ¥15 MATLAB数据处理
  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的
  • ¥15 硬件IIC从模式的数据发送,中断数据的接收,不能用HAL库(按照时序图)
  • ¥20 QAxWidget上显示一个word文档后,如何直接在该QAxWidget上修改和保存word文档
  • ¥15 Simulink仿真报错,请问如何解决