c语言中 编程实现求子串函数

c语言中 编程实现求子串函数,第1张

#include <stdio.h>

#include <stdlib.h>

char *substr(const char *s,int n1,int n2)/*从s中提取下标为n1~n2的字符组成一个新字符串,然后返回这个新串的首地址*/

{

char *sp=malloc(sizeof(char)*(n2-n1+2))

int i,j=0

for (i=n1i<=n2i++) {

sp[j++]=s[i]

}

sp[j]=0

return sp

}

int main(void)

{

char s[80],*sub

scanf("%s",s)/*输入原字符串s*/

sub=substr(s,0,5)/*提取s[0]~s[5]元素组成新子串,并保存到sub中*/

printf("substr:%s\n",sub)/*输出sub*/

free(sub)/*释放sub所占用的空间*/

return 0

}

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char *sub(char *s,int st,int len)

{char *s1

 int i

 s1=(char*)malloc(len)

 for(i=0i<leni++)s1[i]=s[st+i-1]

 s1[i]='\0'

 return s1

}

int main()

{int n,i,j

 char s[200]

 scanf("%d%*c",&n)

 while(n--)

 {printf("input a string:")

  gets(s)

  printf("i=")

  scanf("%d",&i)

  printf("j=")

  scanf("%d%*c",&j)

  if(i+j>strlen(s))printf("Error\n")

    else printf("%s\n",sub(s,i,j))

 }

 return 0

}

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#include <malloc.h>

#define MAXLEN 40

typedef struct

{

char ch[MAXLEN]

int len

} SString

int StrLength(SString s)

{

return(s.len)

}

int SubString(SString *sub,SString *s,int pos,int len)

{

int i

if(pos<0||pos>s->len||len<1||len>s->len-pos)

{

sub->len=0

return(10)

}

else

{

for(i=0i<leni++)

{

sub->ch[i]=s->ch[i+pos]

}

sub->len=len

return(1)

}

}

void main()

{

SString s, sub

char buffer[128]

scanf("请输入一串字符串:%c",&s.ch)/*1.请使用%S,2.请使用s.ch*/

strcpy(s.ch, "opqrst")/*为什么又把它覆盖掉*/

StrLength(SString)/*这句话什么意思,返回值为什么又被忽略,去掉就没有语法错误,逻辑错误多*/

printf("你输入的字符串长度为:%d\n",s.len)/*s.len未初始化*/

printf("主串为:opqrst\n",s.ch)/*这句话什么意思*/

s.len = 6

SubString(&sub, &s, 3, 3)

memcpy(buffer, sub.ch, sub.len)

buffer[sub.len] = 10

printf("子串为: %s\n",buffer)

}

===========================================

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#include <malloc.h>

#define MAXLEN 40

typedef struct

{

char ch[MAXLEN]

int len

} SString

int SubString(SString *sub,SString *s,int pos,int len)

{

int i

if(pos<0||pos>s->len||len<1||len>s->len-pos)

{

sub->len=0

return(0)

}

else

{

for(i=0i<leni++)

{

sub->ch[i]=s->ch[i+pos]

}

sub->len=len

return(1)

}

}

void main()

{

SString s,sub

char buffer[128]

clrscr()

scanf("%s",s.ch)

s.len=strlen(s.ch)

printf("你输入的字符串长度为%d\n",s.len)

printf("主串为%s\n",s.ch)

SubString(&sub,&s,3,3)/*后两个参数改成要求输入*/

/*memcpy(buffer,sub.ch,sub.len)*/

printf("子串为%s\n",sub.ch)

getch()

}

SubString函数的逻辑错误就自己改吧


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12084793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存