确定字符t是否为s的子串,若不是,函数返回0,否则输出字符串t在s中第一次出现时其首字符的位置,

确定字符t是否为s的子串,若不是,函数返回0,否则输出字符串t在s中第一次出现时其首字符的位置,请问如何用c语言编写,谢谢大家,... 确定字符t是否为s的子串,若不是,函数返回0,否则输出字符串t在s中第一次出现时其首字符的位置,请问如何用c语言编写,谢谢大家, 展开
 我来答
chenjunhong120368183
高粉答主

推荐于2018-03-01 · 关注我不会让你失望
知道大有可为答主
回答量:2.4万
采纳率:77%
帮助的人:1641万
展开全部
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <stdio.h>#include <conio.h>#include <string.h>#include <stdlib.h>#pragma warning (disable:4996)char *strstr(char *s1,char *s2);int main(void){ char *s = "Golden Global View"; char *l = "ob"; //char *l="" char *p; system("cls"); p=strstr(s,l); if (p!=NULL) { printf("%s\n",p); } else { printf("Not Found!\n"); } getch(); return 0;}char *strstr(char *s1,char *s2){ int n; if (*s2) //两种情况考虑 { while(*s1) { for (n=0;*(s1+n)==*(s2+n);n++) { if (!*(s2+n+1)) //查找的下一个字符是否为'\0' { return (char*)s1; } } s1++; } return NULL; } else { return (char*)s1;遍历一遍字符串,统计相同字符组成的子串的字符数,然后把最长的子串作为结果。

例:
char* GetSubstring(char* strSource)
{
char* strSubstring; //用于保存得到的子串,大小在找到最大子串后再确定,作为返回值
int nLen; //源字符串长度
int nCurPos; //当前统计字符串的头指针位置(相对于原字符串第一个字符的位置)
int nCurCount; //当前统计字符串的长度(有相同字符组成的子字符串)
int nPos; //当前最长的子串的头指针位置
int nCount; //当前最长的子串的长度

nLen = strlen(strSource);

//初始化变量
nCount = 1;
nPos = 0;
nCurCount = 1;
nCurPos = 0;

//遍历整个字符串
for(i = 1; i < nLen; i++)
{
if(strSource[i] == strSource[nCurPos])//如果当前字符与子串的字符相同,子串长度增1
nCurCount++;
else //如果不相同,开始统计新的子串
{
if(nCurCount > nCount)//如果当前子串比原先最长的子串长,把当前子串信息(起始位置 + 长度)保留下来
{
nCount = nCurCount;
nPos = nCurPos;
}
//长度复值为1,新串的开始位置为i
nCurCount = 1;
nCurPos = i;
}
}

//为返回的子串分配空间(长度为nCount,由于要包括字符串结束符\0,故大小要加1)
strSubstring = (char*)malloc(nCount + 1);

//复制子串(用其他函数也可以)
for(i = 0; i < nCount; i++)
strSubstring[i] = strSource[nPos + i];
strSubstring[nCount] = '\0';

return strSubstring;
}

//不太明白你的“输出”究竟是什么意思,只好给段示意性代码
main()
{
//输入一个字符串strSource

char* strSubstring = GetSubstring(strSource);

printf("最长子串为:%s\n长度为:%d",strSubstring,strlen(strSubstring));

//释放strSubstring
free(strSubstring);
} }}
匿名用户
2018-03-01
展开全部
const char * strstr ( const char * str1, const char * str2 );
      char * strstr (       char * str1, const char * str2 );

示例如下

/* strstr example */
#include <stdio.h>
#include <string.h>
int main ()
{  
  char str[] ="This is a simple string";
  char* pch;
  pch = strstr (str,"simple");
  strncpy (pch,"sample",6);
  puts (str);
  return0;
}



已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-06-22
展开全部
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning (disable:4996)
char *strstr(char *s1,char *s2);
int main(void)
{
    char *s = "Golden Global View"; 
    char *l = "ob";   //char *l="" 
 char *p; 
    system("cls"); 
    p=strstr(s,l); 
    if (p!=NULL) 
    {
        printf("%s\n",p); 
    }
    else 
    {  
        printf("Not Found!\n"); 
    }    
    getch(); 
    return 0;
}
char *strstr(char *s1,char *s2)
{
    int n; 
    if (*s2)   //两种情况考虑 
    {
        while(*s1)
        {
            for (n=0;*(s1+n)==*(s2+n);n++)
            {
                if (!*(s2+n+1)) //查找的下一个字符是否为'\0' 
                {
                    return (char*)s1;
                }
            }
            s1++;
        }
        return NULL;
    } 
    else
    {
        return (char*)s1;
    }
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DoramiHe
2018-02-27 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59543
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
思路很简单,遍历一遍字符串,统计相同字符组成的子串的字符数,然后把最长的子串作为结果。

例:
char* GetSubstring(char* strSource)
{
char* strSubstring; //用于保存得到的子串,大小在找到最大子串后再确定,作为返回值
int nLen; //源字符串长度
int nCurPos; //当前统计字符串的头指针位置(相对于原字符串第一个字符的位置)
int nCurCount; //当前统计字符串的长度(有相同字符组成的子字符串)
int nPos; //当前最长的子串的头指针位置
int nCount; //当前最长的子串的长度

nLen = strlen(strSource);

//初始化变量
nCount = 1;
nPos = 0;
nCurCount = 1;
nCurPos = 0;

//遍历整个字符串
for(i = 1; i < nLen; i++)
{
if(strSource[i] == strSource[nCurPos])//如果当前字符与子串的字符相同,子串长度增1
nCurCount++;
else //如果不相同,开始统计新的子串
{
if(nCurCount > nCount)//如果当前子串比原先最长的子串长,把当前子串信息(起始位置 + 长度)保留下来
{
nCount = nCurCount;
nPos = nCurPos;
}
//长度复值为1,新串的开始位置为i
nCurCount = 1;
nCurPos = i;
}
}

//为返回的子串分配空间(长度为nCount,由于要包括字符串结束符\0,故大小要加1)
strSubstring = (char*)malloc(nCount + 1);

//复制子串(用其他函数也可以)
for(i = 0; i < nCount; i++)
strSubstring[i] = strSource[nPos + i];
strSubstring[nCount] = '\0';

return strSubstring;
}

//不太明白你的“输出”究竟是什么意思,只好给段示意性代码
main()
{
//输入一个字符串strSource

char* strSubstring = GetSubstring(strSource);

printf("最长子串为:%s\n长度为:%d",strSubstring,strlen(strSubstring));

//释放strSubstring
free(strSubstring);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xinjichang
2016-06-22 · TA获得超过243个赞
知道小有建树答主
回答量:398
采纳率:25%
帮助的人:78.4万
展开全部
这个可以私信我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式