学校OJ求助。。。

qq_40928476 2017-11-04 02:47:10
题目在这:


Description





题目描述

给你两个字符串a和b,请问字符串a是否可以去掉若干个字符以后成为字符串b?。

输入

第一行是一个整数K,表示样例数。 以后每个样例占2行,分别为两个字符串a和b。字符串只有英文大写字母组成,长度不超过200。

输出

每行输出一个结果,如果包含,输出Yes,否则输出No。

样例输入
2 XATBBUXTUXATBBUUTX
样例输出
YesNo



代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char a[202];
char b[202];
int n,i,j,l;
char c,d;
scanf("%d",&n);
for(i=0;i<n;i++)
{
int p=0;
int k=0;
for(j=0;;j++)
{
c=getchar();
a[j]=c;
if(c=='\n'&&j>0)
break;
}
for(j=0;;j++)
{
d=getchar();
b[j]=d;
if(d=='\n'&&j>0)
break;
}
for(j=0;j<strlen(b)-1;j++)
{
for(l=k;l<strlen(a)-1;l++)
{
if(b[j]==a[l])
{
p++;
k=l;
break;
}
}
}
if(p==strlen(b)-1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
}
思路是按照顺序让数组a里的元素与数组b中的元素依次匹配,自己试了很多次都可以,但提交后却显示错误
...全文
442 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
罗良彬 2019-01-17
  • 打赏
  • 举报
回复
无返回值。。。
636f6c696e 2019-01-02
  • 打赏
  • 举报
回复
无非是异常场景没考虑清除,试试极端场景测试下
_ZGq 2018-12-27
  • 打赏
  • 举报
回复
1.(对于4楼的代码,其他人可以当成这一条没有) 不要输出提示信息(即使是a的长度<b的时候,也应该输出No)。
2. 参考一下思路:判断b是否是a的子集(就是可以不连续的子序列)。
真相重于对错 2017-11-06
  • 打赏
  • 举报
回复
for(j=0;j<strlen(b)-1;j++) { for(l=k;l<strlen(a)-1;l++) //如果匹配到a的结尾,还没有匹配成功的话,应该判作不匹配,而不是继续上层的循环! { if(b[j]==a[l]) { p++; k=l; break; } } }
自信男孩 2017-11-06
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

#define MAX_LEN     202

int main(void)
{


#if 1
    char a_str[MAX_LEN];
    char b_str[MAX_LEN];
    int num, a_len, b_len;
    int i, j, k;

    scanf("%d", &num);

    for (i = 0; i < num; i++) {
        scanf("%s", a_str);
        scanf("%s", b_str);

        a_len = strlen(a_str);
        b_len = strlen(b_str);
        if (a_len < b_len) {
            printf("a should be lenger than b\n");
            continue;
        }

        k = 0;
        for (j = 0; j < a_len; j++)
            if (b_str[k] == a_str[j])
                k++;
        if (k >= b_len)
            printf("Yes\n");
        else
            printf("No\n");
    }


#else
    char a[202];
    char b[202];
    int n,i,j,l;
    char c,d;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        int p=0;
        int k=0;
        for(j=0;;j++)
        {
            c=getchar();
            a[j]=c;
            if(c=='\n'&&j>0)
                break;
        }
        for(j=0;;j++)
        {
            d=getchar();
            b[j]=d;
            if(d=='\n'&&j>0)
                break;
        }
        for(j=0;j<strlen(b)-1;j++)
        {
            for(l=k;l<strlen(a)-1;l++)
            {
                if(b[j]==a[l])
                {
                    p++;
                    k=l;
                    break;
                }
            }
        }
        if(p==strlen(b)-1)
        {
            printf("Yes\n");
        }
        else
        {
            printf("No\n");
        }
    }
#endif
    return 0;
}
参考一下吧
开心秋水 2017-11-05
  • 打赏
  • 举报
回复
样例输入
2 XATBBUXTUXATBBUUTX
为啥这个例子的输入只有一个字符串?
logiciel 2017-11-04
  • 打赏
  • 举报
回复
如下增加3行:
#include <stdio.h>
#include <string.h>
int main()
{
  char a[202];
  char b[202];
  int n,i,j,l;
  char c,d;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    int p=0;
    int k=0;
    for(j=0;;j++)
    {
      c=getchar();
      a[j]=c;
      if(c=='\n'&&j>0)
        break;
    }
    a[j + 1] = 0;//加字符串结束符
    for(j=0;;j++)
    {
      d=getchar();
      b[j]=d;
      if(d=='\n'&&j>0)
        break;
    }
    b[j + 1] = 0;//加字符串结束符
    for(j=0;j<strlen(b)-1;j++)
    {
      for(l=k;l<strlen(a)-1;l++)
      {
        if(b[j]==a[l])
        {
          p++;
          k=l;
          break;
        }
      }
    }
    if(p==strlen(b)-1)
    {
      printf("Yes\n");
    }
    else
    {
      printf("No\n");
    }
  }
  return 0;//加正常返回
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧