确定字符t是否为s的子串,若不是,函数返回0,否则输出字符串t在s中第一次出现时其首字符的位置,
确定字符t是否为s的子串,若不是,函数返回0,否则输出字符串t在s中第一次出现时其首字符的位置,请问如何用c语言编写,谢谢大家,...
确定字符t是否为s的子串,若不是,函数返回0,否则输出字符串t在s中第一次出现时其首字符的位置,请问如何用c语言编写,谢谢大家,
展开
5个回答
展开全部
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);
} }}
例:
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;
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2018-02-27 · 知道合伙人互联网行家
关注
展开全部
思路很简单,遍历一遍字符串,统计相同字符组成的子串的字符数,然后把最长的子串作为结果。
例:
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);
}
例:
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个可以私信我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询