6-5 查找子串 (20分)

本题要求实现一个字符串查找的简单函数。
函数接口定义:

char *search( char *s, char *t );

函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。
裁判测试程序样例:

#include <stdio.h>
#define MAXS 30

char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */

int main()
{
    char s[MAXS], t[MAXS], *pos;

    ReadString(s);
    ReadString(t);
    pos = search(s, t);
    if ( pos != NULL )
        printf("%d\n", pos - s);
    else
        printf("-1\n");

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

The C Programming Language
ram

输出样例1:

10

输入样例2:

The C Programming Language
bored

输出样例2:

-1

char *search( char *s, char *t )
{    char *k,*q;    
	int flag=0;
    
    while(*s!='\0'){        
    	q=t;     
    	if(*s==*q){            
    		k=s;            
    		while(*q!='\0'){                
    			flag=0;                
    			if(*s==*q)                    
    				flag=1;                
    			else                    
    				break;                    
    			s++;                
    			q++;            
    		}        
     	}            
    	if(flag)            
    		break;        
    	s++;        
     }    
    if(flag)         
    	return k;    
    else            
    	return NULL;       
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是用C语言实现查找子串并替换的思路: 1. 首先定义一个函数,用于查找主串中的子串,并返回子串在主串中的位置(如果存在)。 2. 如果子串存在,则定义另外一个函数用于替换操作。这个函数需要接受三个参数:主串、子串和替换的字符串。 3. 在这个函数中,我们需要先计算出替换后的字符串的长度,然后申请一个新的字符串空间,将替换后的字符串复制到新的字符串空间中。 4. 然后开始遍历主串,如果发现子串,就将替换后的字符串复制到新的字符串空间中,并将指针移动到替换后的字符串的结尾处。 5. 如果没有发现子串,就将主串当前位置的字符复制到新的字符串空间中,并将指针移动到新的字符串空间中的下一个位置。 6. 最后,将新的字符串空间中的内容复制回原来的主串中,完成替换操作。 下面是一个实现查找子串并替换的示例函数: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> int find_substring(char *str, char *sub) { int len1 = strlen(str); int len2 = strlen(sub); int i, j; for(i = 0; i <= len1 - len2; i++) { for(j = 0; j < len2; j++) { if(str[i+j] != sub[j]) break; } if(j == len2) return i; } return -1; } void replace_substring(char *str, char *sub, char *replace) { int len1 = strlen(str); int len2 = strlen(sub); int len3 = strlen(replace); char *new_str = (char *) malloc(len1 * len3 * sizeof(char)); int i = 0, j = 0; while(str[i] != '\0') { if(find_substring(&str[i], sub) == 0) { strcpy(&new_str[j], replace); j += len3; i += len2; } else { new_str[j] = str[i]; i++; j++; } } new_str[j] = '\0'; strcpy(str, new_str); free(new_str); } int main() { char str[100] = "hello world, world is beautiful!"; char sub[10] = "world"; char replace[20] = "universe"; printf("Before replace: %s\n", str); replace_substring(str, sub, replace); printf("After replace: %s\n", str); return 0; } ``` 这个程序先定义了一个 `find_substring()` 函数用于查找子串,如果找到,则返回子串在主串中的位置。然后定义了一个 `replace_substring()` 函数用于替换操作。这个函数先计算出替换后的字符串的长度,然后申请一个新的字符串空间,遍历主串,如果发现子串,则将替换后的字符串复制到新的字符串空间中。最后将新的字符串空间中的内容复制回原来的主串中,完成替换操作。 在 `main()` 函数中,我们定义了一个主串、一个子串一个替换字符串,然后调用 `replace_substring()` 函数进行替换操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值