在线等!!!急!急!急!用C语言求字符串的任意子串和某一字符串在另一字符串的位置

不要用C提供的现有的函数,最好是自己重新设计!
2024-12-03 03:22:16
推荐回答(3个)
回答1:

在我的书上正好有你用的例子。。给你!
输入两个字符串a和b,判断字符串b是否是字符串a的字串。是,则输入字符串b在a中的位置(从1开始);否则输出“不是字串".
如:
字符串a为”ABCDEF"
字符串b为“CD”
则输出3
如果字符串b为“CE”则输出“不是字串”
源程序如下:
#include /*使用了字符串输入输入出函数*/
void main()
{
char a[80],b[40];
int na, nb, i, j, flag;

gets(a);
gets(b);

na = strlen(a), nb = strlen(b); /*统计字符串长度*/
flag = 0; /*预置不是子串的标记变量值*/

for(i = 0; na - i >= nb; i++) /*当a中剩余字符数不足b长度退出循环*/
{
flag = 1; /*预置是子串的标记变量值*/
for(j = 0; j < nb; j++) /*比较b串和a中第i个字符开始的字符串*/
if(a[i+j] != b[j]) /*当前字符不同,置标记为0,退出循环*/
{
flag = 0; break;
}
if(flag == 1) /*如果标记值为1,表示找到字串*/
break; /退出 i。的外层for循环*/
}
if(flag == 1)
printf("%s\n&s\n%d\n", a, b, i+1);
else
printf("b_string not is substring of a_string! \n);
}
/*在记事本里编辑的 没有测试。可能会出现输入差错。*/

回答2:

一楼的正解
二楼的有几个错误修改后如下
#include /*使用了字符串输入输入出函数*/
#include
void main()
{
char a[80],b[40];
int na, nb, i, j, flag;

gets(a);
gets(b);

na = strlen(a), nb = strlen(b); /*统计字符串长度*/
flag = 0; /*预置不是子串的标记变量值*/

for(i = 0; na - i >= nb; i++) /*当a中剩余字符数不足b长度退出循环*/
{
flag = 1; /*预置是子串的标记变量值*/
for(j = 0; j < nb; j++) /*比较b串和a中第i个字符开始的字符串*/
if(a[i+j] != b[j]) /*当前字符不同,置标记为0,退出循环*/
{
flag = 0; break;
}
if(flag == 1) /*如果标记值为1,表示找到字串*/
break; /*退出 i。的外层for循环*/
}
if(flag == 1)
printf("%s\n&%s\n%d\n", a, b, i+1);
else
printf("b_string not is substring of a_string! \n");
}
运行成功,但是首先不符合字符串的任意子串这一条件

回答3:

#include
void mid(char *s1, int startPos,int len,char *s2)
{
int i;
for(i=0;i s2[i]=s1[i+startPos];
s2[i]='\0';
}
int pos(char *s1,char *s2)
{
int i,j;
for(i=0;s1[i];i++)
{
for(j=0;s1[i+j] && s2[j] && s1[i+j]==s2[j];j++);
if(!s2[j])return i;
}
return -1;
}

main()
{
char str1[]="abcdefghij",str2[80];
int p;
mid(str1,7,4,str2);
printf("%s\n",str2);
p=pos(str1,"abg");
if(p>=0)printf("Find,at %d\n",p);
else printf("No find.\n");
}