| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 346 人关注过本帖
标题:求教,关于子串C(貌似有点难)
只看楼主 加入收藏
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
结帖率:92.59%
收藏
已结贴  问题点数:20 回复次数:4 
求教,关于子串C(貌似有点难)
输入字符{a,b,c}组成的字符串,它的子串依次可以是a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,aab。。。。(后面省略)
找到第一个没有在改字符串中出现的子串。

Sample Input
bcabacbaa
          /空串,规定第一个没有出现的是a/
aaabacbbcacc
 
Sample Output
bb is absent from bcabacbaa
a is absent from
aac is absent from aaabacbbcacc
2009-07-31 11:32
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:20 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000

int tLen;

void sort(char *point)
{
if(*point>'c')
   {
    *point='a';
     if(*(++point)!='\0') {(*point)++;sort(point);}
       else {*point='a';*(++point)='\0';tLen++;}
   }
}

void rollback(char array[],int Len)
{
 char temp;
 for(int i=0;i<Len/2;i++)
     {
      temp=array[i];
      array[i]=array[Len-i-1];
      array[Len-i-1]=temp;
     }
}

int main()
{
char str[MAX],tem[MAX];
int sLen;
while(gets(str))
{
  tem[0]='a',tem[1]='\0';
  sLen=strlen(str);
  tLen=strlen(tem);
  rollback(str,sLen);
  for(;tLen<=sLen;tem[0]++)
     {
      sort(&tem[0]);
      if(strstr(str,tem)==NULL) break;
     }
  rollback(tem,tLen);
  rollback(str,sLen);
  printf("%s is absent from %s\n",tem,str);
}
system("pause");
return 0;
}

[[it] 本帖最后由 godbless 于 2009-7-31 15:50 编辑 [/it]]
2009-07-31 15:07
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
收藏
得分:0 
回复 2楼 godbless
void sort(char *point)
{
if(*point>'c')
   {
    *point='a';
     if(*(++point)!='\0') {(*point)++;sort(point);}
       else {*point='a';*(++point)='\0';tLen++;}
   }
}
非常谢谢你,但是能麻烦你解释一下这个函数是什么意思有什么作用么?因为没看太懂。
2009-08-03 13:19
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
回复 3楼 huicpc0876
我是把字符串给反转了的,你应该可以看出来,为了好进位.

即a,b,c,aa,ba,ca,ab,bb,cb,ac,bc,cc,aaa,baa.........

这个函数是一个字符串整合(模拟进位).就是把比如dca变成aab的形式.即逢c进1.

void sort(char *point)
{
if(*point>'c')            //当这个字符大于c,实际上也可以改成*point=='d'
   {
    *point='a';           //这个字符变成a
     if(*(++point)!='\0') {(*point)++;sort(point);}
     //当这个字符后面的那个不是空字符,就加1,然后对他进行整排(递归).
     //如:da->ab,在对后面那个b整排
       else {*point='a';*(++point)='\0';tLen++;}
    //当后面的字符为空字符,直接变成a,再在后面加个空字符.
    //如:dc->aaa
   }

[[it] 本帖最后由 godbless 于 2009-8-3 13:36 编辑 [/it]]
2009-08-03 13:34
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
收藏
得分:0 
回复 4楼 godbless
太厉害了,崇拜你了!~~
2009-08-03 20:26
快速回复:求教,关于子串C(貌似有点难)
数据加载中...
 
   



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

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