编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,返回子串在主串中的位置?

要C++的程序,C的看过了,思路知道了,就是格式区别太大,求C++的... 要C++的程序,C的看过了,思路知道了,就是格式区别太大,求C++的 展开
 我来答
fallx
推荐于2018-03-07 · TA获得超过5485个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:722万
展开全部
#include <string> 
#include <iostream>
using namespace std;
//参考:http://blog.csdn.net/u011303443/article/details/70146384
char temp_str[256];
void ReadStrUnit(char * str,char *temp_str,int idx,int len)  // 从母串中获取与子串长度相等的临时子串
{
    int index = 0;
    for(index; index < len; index++)
    {
        temp_str[index] = str[idx+index];
    }
    temp_str[index] = '\0';
}
int GetSubStrPos(char *str1,char *str2)
{
    int idx = 0;
    int len1 = strlen(str1);
    int len2 = strlen(str2);

    if( len1 < len2)
    {
        cout<<"error 1 "<<endl; // 子串比母串长
        return -1;
    }

    while(1)
    {
        ReadStrUnit(str1,temp_str,idx,len2);    // 不断获取的从 母串的 idx 位置处更新临时子串
        if(strcmp(str2,temp_str)==0)break;      // 若临时子串和子串一致,结束循环
        idx++;                                  // 改变从母串中取临时子串的位置
        if(idx>=len1)return -1;                 // 若 idx 已经超出母串长度,说明母串不包含该子串
    }

    return idx;    // 返回子串第一个字符在母串中的位置
}
int main(void)  
{  
    char *s1="abc";
    char *s2="dfdsfdsabcdfdsabcdd";   
    int i = 0;
    cout<<s1<<endl<<s2<<endl;
    i = GetSubStrPos(s2,s1);  //注意,函数调用:母串在前,子串在后
    if( i<0 )
    {
        cout<<"not found"<<endl;
    }
    else
    {
        cout<<"i ="<<i<<endl;//注意,i是从0开始计数的
    }
 
    
    return 0;  
}
匿名用户
2014-03-20
展开全部
#include <stdio.h>
#include <string.h>
//---
int cmpsubstr(char a[81],char b[81])
{
int i,j,flag=-1;
for(i=0;i<=(strlen(a)-strlen(b));i++)
{
flag=i;
for(j=0;j<strlen(b);j++)
if(b[j]!=a[i+j])
break;
if(j==strlen(b))
return flag;
}
return -1;
}
//---
void main()
{
char a[81],b[81];
int n;
printf("输入字符串a:");
gets(a);
printf("输入字符串b:");
gets(b);
if(strlen(a)>=strlen(b))
{
n=cmpsubstr(a,b);
if(n!=-1)
printf("b是a的子串,位置从a[%d]开始",n);
else
printf("b不是a的子串");
}
else
{
n=cmpsubstr(b,a);
if(n!=-1)
printf("a是b的子串,位置从b[%d]开始",n);
else
printf("a不是b的子串");
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式