精华内容
下载资源
问答
  • c语言——查找子串

    千次阅读 2020-05-16 00:49:32
    c语言——查找子串 int del_substr(char *str, const char *substr); 函数首先判断 substr是否出现在str中,如果并未出现,函数就返回0 如果出现,函数应该把str中该字符串后面的所有字符串赋值到该字符串位置 从而...

    c语言——查找子串

    int del_substr(char *str, const char *substr);
    

    函数首先判断 substr是否出现在str中,如果并未出现,函数就返回0
    如果出现,函数应该把str中该字符串后面的所有字符串赋值到该字符串位置
    从而删除这个字符串,然后函数返回1。如果 substr多次出现在str中,函数只删除第1次出现的字符串

    • a.函数中不使用任何操作字符串的函数.(如: strcpystrcmp等)
    • b.函数中的任何地方不使用下标。

    原理

    利用双指针比较。
    在这里插入图片描述

    例子

    	char *str = "abcdefgdfpoiq";
    	char *sub = "df";
    

    返回

    pos = dfpoiq
    

    代码

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    //查找子串第一次出现的位置
    char* myStrStr(const char *str, const char *substr) {
    	const char *mystr = str;
    	const char *mysub = substr;
    
    	while (*mystr != '\0') {
    
    		if (*mystr != *mysub) {
    			++mystr;
    			continue;
    		}
    
    		//临时指针变量
    		const char *temp_mystr = mystr;
    		const char *temp_mysub = mysub;
    
    		while (*temp_mysub != '\0') {
    
    			if (*temp_mystr != *temp_mysub) {
    				++mystr;//后面的字符不相等,要直接跳过,因为我们已经对比过是不相等的了,没有必要再比较一次。
    				break;
    			}
    			//两字符相等,两指针同时向后走
    			++temp_mysub;
    			++temp_mystr;
    		}
    
    		//说明匹配成功
    		if (*temp_mysub == '\0') {
    			//mystr是const char *类型,这里要强转为char *类型
    			return (char*) mystr;
    		}
    	}
    	return NULL;
    }
    
    void test() {
    	char *str = "abcdefg";
    	char *sub = "f";
    	char *pos = myStrStr(str, sub);
    	printf("pos = %s\n", pos);
    
    }
    
    int main() {
    
    	test();
    
    	system("pause");
    	return EXIT_SUCCESS;
    }
    
    

    运行

    pos = fg
    
    展开全文
  • 查找一个子串在母串中出现的次数。 void search_str(char *whole_str,char *str,int *num) { char *p = whole_str; while (*p != '\0') { p = strstr(p, str); // strstr返回第一次找到出现的位置 if (p != ...

    查找一个子串在母串中出现的次数。

    void search_str(char *whole_str,char *str,int *num)
    {
    	char *p = whole_str;
    	while (*p != '\0')
    	{
    		p = strstr(p, str); // strstr返回第一次找到出现的位置
    		if (p != NULL)
    		{
    			(*num)++; // ++ 比 * 优先级高,所以要加上(*num)
    			p += strlen(str);
    		}
    		else
    		{
    			break;
    		}
    	}
    	return;
    }
    
    
    int main()
    {
    	char *str = "abcd23dafdasfda3333333abcd";
    	int num = 0;
    	//do 
    	//{
    	//	str = strstr(str, "abcd");
    	//	if (str != NULL)
    	//	{
    	//		num++;
    	//		str += strlen("abcd");
    	//	}
    	//	else
    	//		break;
    	//} while (*str!='\0');
    
    	search_str(str, "abcd", &num);
    	printf("%d", num);
    	system("pause");
    	return 1;
    }
    
    展开全文
  • 系统提供的查找子串为:strstr。:在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。 函数声明: char *strstr(const char *haystack, const char *needle) 参数: haystack:要被...

    一、系统提供的函数:strstr

    系统提供的查找子串为:strstr。:在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。

    函数声明:
    char *strstr(const char *haystack, const char *needle)
    参数:
    haystack:要被检索的C字符串
    needle:在haystack字符串内要搜索的小字符串
    返回值:
    成功:返回在 haystack 中第一次出现 needle 字符串的位置
    失败:返回NULL
    

    使用方法如下:我们对其直接调用。

    #include <stdio.h>
    #include <string.h>
     
    int main()
    {
       const char haystack[20] = "RUNOOB";
       const char needle[10] = "NOOB";
       char *ret;
     
       ret = (char*)strstr(haystack, needle);
     
       printf("子字符串是:%s\n", ret);
    
       return(0);
    }
    

    输出结果:查找成功。
    在这里插入图片描述

    二、自己实现strstr函数

    问题探究: 我们需要查找一个子串,如下:
    在这里插入图片描述
    实现思路: 这里只是一个简单的思路,代码实现可以使用memcmp函数再优化。
    在这里插入图片描述
    代码实现:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int MyStrstr(char* str,char* substr)
    {
    	int num = 0;
    	while (*str != '\0')
    	{
    		if (*str != *substr)
    		{
    			str++;
    			num++;
    			continue;
    		}
    
    		//创建临时指针
    		char* tmpstr = str;
    		char* tmpsubstr = substr;
    
    		while (*tmpsubstr != '\0')
    		{
    			if (*tmpstr != *tmpsubstr)
    			{
    				//匹配失败
    				str++;
    				num++;
    				break;
    			}
    			tmpstr++;
    			tmpsubstr++;
    		}
    		if (*tmpsubstr == '\0')//匹配成功
    		{
    			return num;
    		}
    	}
    	return -1;
    }
    
    void test()
    {
    	char* str = "abclefglol";
    	int ret = MyStrstr(str,"lol");
    
    	if (ret == -1)
    	{
    		printf("查找失败!\n");
    	}
    	else
    	{
    		printf("查找成功!位置为:%d\n",ret);
    	}
    }
    
    int main()
    {
    	test();
    
    	return 0;
    }
    

    运行结果:查找成功!
    在这里插入图片描述
    改为一个该串中没有的字符串:预期查找失败!

    int ret = MyStrstr(str,"qwe");
    

    运行结果:查找失败!
    在这里插入图片描述

    展开全文
  • C语言入门:查找子串

    万次阅读 2017-08-12 17:37:47
    查找子串:输入两个字符串s和t,在字符串s中查找子串t,输出起始位置,若不存在,则输出-1.要求自定义函数char* search(char * s,char * t)返回子串t的首地址,若未找到,则返回NULL。试编写相应程序。 #include ...

    查找子串:输入两个字符串s和t,在字符串s中查找子串t,输出起始位置,若不存在,则输出-1.要求自定义函数char*  search(char * s,char * t)返回子串t的首地址,若未找到,则返回NULL。试编写相应程序。


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char* search(char*s,char*t)
    {	
    	int size_t=strlen(t),size_s=strlen(s),T,i,j;
    	char *p=NULL;
    	for(i=0;i<=(size_s-size_t);i++)
    	{
    		p=s+i;
    		T=1;
    		for(j=0;j<size_t;j++)
    		{
    			if(*p!=*(t+j))
    			{
    				T=0;
    				break;
    			}
    			p++;
    		}
    		if(T==1)
    			break;
    	}
    	if(T==0)
    		return NULL;
    	else
    		return s+i;
    }
    
    
    
    
    int main()
    {
    	char *s,*t,*p,ch;
    	int count,i;
    	while(1) 
    	{
    		printf("请输入字符串s:(直接输入回车退出)\n");
    		s=(char *)malloc(sizeof(char));       //这里使用动态输入字符串
    		count=0;                //内存足够下可以使字符串字符个数不受数组大小限制
    		while((ch=getchar())!='\n')
    		{
    			s[count]=ch;
    			count++;
    			s=(char *)realloc(s,(count+1)*sizeof(char));
    		}
    		s[count]='\0';
    		if(count==0)                        //程序结束判断
    		{
    			printf("程序运行结束!\n");
    			break;
    		}
    		while(1)                //防止子串输入字符个数超过s的循环
    		{
    			t=(char *)malloc((count+1)*sizeof(char));
    		    printf("输入子串t:\n");
    			i=0;
    		    while((ch=getchar())!='\n')   //循环输入字符来计数
    			{
    				t[i]=ch;
    		    	i++;
    			}
    			t[i]='\0';
    		    if(i>count)
    			{
    				printf("子串t串长>s串长,请重新");
    				t=(char *)realloc(t,i*sizeof(char));   //保证内存成功释放,重新分配t内存
    				free(t);
    			}
    			else
    				break;
    		}
    		if((p=search(s,t))!=NULL)
    		{
    			printf("起始位置:从第%d个字符开始\n",p-s+1);
    	        printf("%s\n\n",p);
    		}
    		else
    		    printf("-1\n\n");     //题目要求没有找到则输出-1
    		free(s); 
    		free(t);
    	}
    	return 0;
    }


     用了malloc和realloc来实现动态内存分配从而实现输入字符个数不再受数组大小限制(内存足够的话),并且考虑到子串t可能因为超出s的个数而出错做了个容错判断,总体上加了循环实现循环输入并设置了一个退出程序出口。这里所有用动态分配的指针全部都及时释放了不会因为循环次数的增多而导致内存占用增大。

     由于realloc动态分配操作较慢,此程序还可以做优化,比如先开辟10字符的空间,每输入10个字符后再多开辟10字符空间,程序运行速度可以比此程序更快。(但对于这么一点可以忽略不计( ̄▽ ̄)~*)

     自定义函数部分使用了从被查找串s第一个字符开始,与t串的字符逐个比较的方法来查找,目前也只能想到了这种查找方法。



    结果:


            




    展开全文
  • C语言编写代码:完成对任何两个字符串 a和b的连接,并在连接后的字符串中查找子串c在母串中首次出现的位置。 要求(1)子串a、b、c从键盘输入;(2)输出母串、子串以及子串在母串中的位置。 ...
  • #include int find_str(char *str, char *s) { int str_len = strlen(str); int s_len = strlen(s); char *s1, *s2; int val = 0; while(*str != '\0') { s1 = str;... while(*s1 == *s2 && *s
  • 字符串中查找子串

    2016-03-30 22:31:29
    使用C语言编写程序:1、在字符串中查找一个指定的字符第一次出现的位置,并返回字符所在的位置,如果不存在则返回NULL具体实现如下:char*strchr(charconst*str,intch) { char*st=(char*)str; while(st) { if(*...
  • C语言 查找字符串子串 返回位置

    万次阅读 2017-04-12 19:12:43
    主要的思路就是,不断的从母串 str1 中取出和子串长度...成功找到子串,返回子串首字母在母串中的位置,该位置从 0 开始。#include #include <string.h>char temp_str[30]; // 临时子串void ReadStrUnit(char * str,ch
  • C语言查找字符串

    千次阅读 2017-09-21 00:17:55
    简述使用c语言实现字符串查找子串,返回第一个子串出现的位置。环境 ubuntu16.04 LTS GCC编译器 代码 #include #define N 100 int find_str(char* str1,char* str2) { int i,j,flag=-1; for(i=0,j=0;str1[i]!=...
  • 注意引入的新函数strstr C语言函数 ...str1: 被查找目标 string expression to search. ...str2: 要查找对象 The string expression to ...返回值:若str2是str1的子串,则先确定str2在str1的第一次出现的位置,...
  • 查找str2指向的字符串在str1指向的字符串中首次出现的位置,返回指向该位置的指针。若str2指向的字符串不包含在str1指向的字符串中,则返回空指针NULL。 注意这里必须使用指针而不是数组下标来访问字符...
  • 分别遍历两个字符串,一个是外循环,一个是内循环,当内、外循环发现有相同的字符的时候,从当前位置开始匹配common子串,并记录长度,如果长度大于max,则更新最长的公共子串;最后用memcpy将找到的最长公共子串...
  • int strindex(char *res,int pos,char *substr) //返回substr在resource中在pos后出现的位置,返回0表示没找到 int del_substr(char *res,int pos,int len)//从res的pos位置开始删除len个字符,1成功,0失败 int insert...
  • 先说查找,字符串的查找主要使用strstr函数,其原型为:char * strstr(char * str1, char * str2),函数的功能是在str1中查找str2,如果str2是str1的子串,则返回str2在str1中第一次出现的位置,否则返回空指针。...
  • C语言实现字符串的查找和替换

    万次阅读 多人点赞 2016-06-02 15:19:42
     先说查找,字符串的查找主要使用strstr函数,其原型为:char * strstr(char * str1, char * str2),函数的功能是在str1中查找str2,如果str2是str1的子串,则返回str2在str1中第一次出现的位置,否则返回空指针。
  • C语言笔记

    2020-06-14 16:01:02
    查找子串(4分) 题目内容: ...函数功能:在字符数组s中查找子串d,返回d在s中首次出现的位置,若找不到,则返回-1。 程序运行结果示例1: Input a string:How are you!↙ Input another string:are↙
  • 1.查找子字符:strchr() 函数原型 char *strchr(const char *str, char c) 参数 str 要被检索的 C 字符串。 c 在 str 中要搜索的字符。 功能 在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的...
  • 假设现在有这样一个问题:有一个文本串S,和一个模式串P,现在要判断S中是否有和P匹配的子串,并查找P在S中的位置,怎么解决呢?这篇文章就为大家介绍了关于这个问题求解的两种算法。 一、BF算法 BF(Brute Force)...
  • c语言strtok用法

    千次阅读 2017-07-17 20:00:36
    1. 函数定义char * strtok ( char * str, const char * delimiters )将str按照delimiters定义的分割符来进行...后续使用传入NULL,并使用上一次查找子串的尾部位置的下一个位置作为查找起始位置,继续查找。2. 例子
  • 1.在主串s中第i个位置之前插入一个子串t\n\t2.在主串s中从第i个位置开始共取m个字符,求子串t\n\t3.求子串t在主串s中的起始位置t\n\t4.退出程序\
  • 1 查找子串T在主串S中所有出现的位置 2 将主串S中第一次出现的子串T替换为串T1 3 删除串S中第pos个字符起长度为len的子串
  • /* 找出一个字符串最大相同子串,如果有多个重复子串,则要求返回最后一个位置子串 */ void print_sub(char *p, int len) {  int save_len = len;  while(len && len--)  {  printf("%c ", *p++);  }...
  • 功能:编写函数IND,让它判断一个字符串是否为另一个字符串的子串的功能,若是则返回第一次出现的起始位置,否则返回0 时间:13:55 2013/10/24 */ #include #include #include void getChar(char *); //键盘...
  • C语言中的strstr函数

    2016-04-22 16:29:00
    早上翻《C和指针》,碰见一个子串查找问题,这个问题在C标准库中有模板,即strstr函数,其原型是char*strstr(const char*s1,const char* s2... 这个函数的作用是在s1中查找子串s2,如果找到,则返回s1中s2的位置。...
  • 0x00 这一节,我们介绍下常用的C语言字符串处理函数和内存管理函数。 0x01 字符串处理函数: strstr:返回字符串中首次... strchr:查找某字符在字符串中首次出现的位置 详解地址:http://c.biancheng.net/cpp/ht

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

c语言查找子串位置

c语言 订阅