| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 945 人关注过本帖
标题:字符串子串
只看楼主 加入收藏
wbfiow
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-7
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
字符串子串
题目描述:

密码学家小A最近正在研究一种新的加密算法,执行这个算法的一个必要条件是判定一个字符串S是否为另一个字符串的T的子串。但是小A是对编程并不擅长,所以他希望作为
编程高手的你能帮他写个程序来判断S是否为T的子串(子串的判定方法是:若可以通过删除T的若干字符来使S=T,则S是T的子串;否则不是)。

--------------------------------------------------------------------------------

输入样例:


4
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter

--------------------------------------------------------------------------------

输出样例:


Yes
No
Yes
No

--------------------------------------------------------------------------------

输入描述:

一个整数N表示有多少组数据。接下来有N行,每行有2个字符串S和T, 每个串的长度不超过100个字符。
--------------------------------------------------------------------------------
 
输出描述:

一组数据输出一行,输出"Yes",如果S是T的子串,否则输出"No"
--------------------------------------------------------------------------------
 
程序限制:

程序可使用最大内存:1000K
程序运行最长耗时:1000MS(毫秒)
--------------------------------------------------------------------------------

大家帮帮忙。。。没有思路呀
搜索更多相关主题的帖子: 密码 字符串 
2011-05-07 13:50
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:7 
程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    unsigned int index1 = 0, index2 = 0;

    char str_1[100] = {0};
    char str_2[100] = {0};
   
    scanf("%s", str_2);
    scanf("%s", str_1);
   
    //printf("%s\n%s\n", str_1, str_2);

    while (index1<strlen(str_1) && index2<strlen(str_2))
    {
        if ( str_1[index1] == str_2[index2] )
        {
            index2++;
        }
        index1++;
    }

    if ( index2 == strlen(str_2) )
    {
        printf("yes\n");
    }
    else
    {
        printf("no\n");
    }

    return 0;
}

一次测试一组数据

这个比求子串应该要简单很多
2011-05-07 18:38
fangdong65
Rank: 5Rank: 5
等 级:职业侠客
帖 子:73
专家分:301
注 册:2011-4-1
收藏
得分:7 
可以将楼上的提取出来作为一个函数用于判断字符串str_2是否是字符串str_1的字串,再在main函数中设定输入
2011-05-07 18:51
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:7 
我的,不过是用的c++, main 函数用来测试,参数1是 子串,参数2 是需要匹配的字符串。 substr 函数用来在大字符串中提取属于子串的字符。
程序代码:
#include <iostream>
#include <string>
using namespace std;

bool is_member(const string & str, char c);
string substr(const string & src, const string & sub);

bool is_substr(const string & src, const string & sub)
{
  if(src.length() < sub.length())
    return false;

  string reduce_str = substr(src, sub);
  if(reduce_str.length() < sub.length())
    return false;
  
  string::const_iterator p = reduce_str.begin();
  for(string::const_iterator i = sub.begin();
      i < sub.end(); i++)
    {
      bool if_find = false;
      for(string::const_iterator j = p;
          j < reduce_str.end(); j++)
        {
          if(*j == *i)
            {
              p = ++j;
              if_find = true;
              break;
            }
        }
      if(!if_find)
        return false;      
    }
  return true;
}

string substr(const string & src, const string & sub)
{
  string str(""); // an empty string
  for(string::const_iterator i = src.begin();
      i < src.end(); i++)
      if(is_member(sub, *i))
        str += *i;
  return str;
}

bool is_member(const string & str, char c)
{
  for(string::const_iterator i = str.begin();
      i < str.end(); i++)
      if(*i == c)
        return true;
  return false;
}

//test:
int main(int argc, char * argv[])
{
  if(argc != 3)
    {
      cout << " Wrong number of arguments!\n";
      return 1;
    }
  string sub = argv[1];
  string src = argv[2];
  
  if(is_substr(src, sub))
    {
      cout << "\"" << sub << "\"" << "\t is a sub-string of\t"
           << "\"" << src << "\"" << endl;
      cout <<  "\"" << src << "\"" << "\thas a substr: \t" 
           << "\"" << substr(src, sub) << "\"" <<endl;
    }
  else
    {
      cout << "\"" << sub << "\"" << "\t is NOT a sub-string of\t"
           << "\"" << src << "\"" << endl;
    }
  return 0;
}

测试几个例子
tisyang@TISYANG-PC /source/cpp
$ ./main sequence subsequence
"sequence"       is a sub-string of     "subsequence"
"subsequence"   has a substr:   "susequence"

tisyang@TISYANG-PC /source/cpp
$ ./main person compression
"person"         is NOT a sub-string of "compression"

tisyang@TISYANG-PC /source/cpp
$ ./main VERDI vivaVittorioEmanueleReDiItalia
"VERDI"  is a sub-string of     "vivaVittorioEmanueleReDiItalia"
"vivaVittorioEmanueleReDiItalia"        has a substr:   "VERDI"

tisyang@TISYANG-PC /source/cpp
$ ./main caseDoesMatter CaseDoesMatter
"caseDoesMatter"         is NOT a sub-string of "CaseDoesMatter"

tisyang@TISYANG-PC /source/cpp
$ ./main sub SUBSUBsUb
"sub"    is NOT a sub-string of "SUBSUBsUb"

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-05-07 19:41
wbfiow
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-7
收藏
得分:0 
谢谢各位大侠 ...
2011-05-09 15:08
简体字01
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:137
注 册:2012-3-4
收藏
得分:0 
回复 2楼 寒风中的细雨
哇哇、太厉害了。
2012-04-11 22:26
快速回复:字符串子串
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024560 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved