浅谈find_char()函数 字符串中找单个字符和多个字符

本文详细介绍了C++中字符串匹配和字符查找的相关算法实现,包括使用指针进行字符串比较的方法以及如何通过循环遍历字符串来查找特定字符。通过实际代码示例展示了这些算法的应用,并对其实现原理进行了深入解析。
<pre name="code" class="cpp">
#include<stdio.h>
#include<stdlib.h>

char const *find_char_strs(char const *p,char const *q)
{
    if(NULL==q&&NULL==p)
	{
	   return NULL;
	   exit(0);
	}
    while('\0'!=*p&&'\0'!=*q)
	{
	    if(*p==*q)
		{   
		    
		   return p;
		    break;
		}
	p++;
	q++;
		
	}

}
int main()
{
	char p[]="abcdef";
	char q[]="xrcqef";
	printf("%s",find_char_strs(p, q));
	return 0;
}

#include<stdio.h>
#include<assert.h>
void find_char(char *str, char value)
{
	assert(str != NULL);
	while (*str!='\0')
	{
		if (value == *str)
	{
		printf("找到了"); 
		break;
	}
	else
	{
		printf("没找到");
	} 
	str++;
	} 
}
  void find_char1(char **strs,int value)
{
	assert(strs!=NULL);
	while(NULL!=*strs)
	{
		while('\0'!=**strs) 
		{ 
			if(value==*(*strs)++)
			printf("找到了"); 
		}
		strs++;
	}
	printf("没找到");
}
int main()
{
	char str[] = "abcd";
	char *p=str;
	char **q=&p;
	find_char1(q, 'a');
	find_char(str,'a');
	return 0;
}


在Python中,`str.find()` 函数本身是用于查单个子串(可以是单个字符多个字符组成的字符串)的第一个匹配位置。如果你想在一个字符串中查多个字母或子串,`str.find()` 并不是最佳选择,因为它只能逐一查,而且返回的是第一个匹配的位置,不适合批量查多个字符或子串。 不过,你可以结合其他方法来实现这一需求。以下是几种常见的方法: ### 方法1:使用列表推导式 正如你之前看到的,可以使用列表推导式来查多个字母是否存在: ```python text = "hello world she said" letters_to_find = ['h', 'e', 'x'] # 使用列表推导式查存在的字母 found_letters = [letter for letter in letters_to_find if letter in text] print(found_letters) # 输出:['h', 'e'] ``` ### 方法2:使用字典记录每个字母的位置 如果你想知道每个字母在字符串中的所有出现位置,可以使用字典来记录: ```python text = "hello world she said" letters_to_find = ['h', 'e', 'x'] # 记录每个字母的所有出现位置 positions = {letter: [i for i, char in enumerate(text) if char == letter] for letter in letters_to_find} print(positions) # 输出:{'h': [0], 'e': [1, 18], 'x': []} ``` ### 方法3:使用正则表达式(`re`模块) 正则表达式非常适合查多个模式或字符。你可以用它来查多个字母: ```python import re text = "hello world she said" letters_to_find = ['h', 'e', 'x'] # 使用正则表达式查所有匹配的字母 pattern = '[' + ''.join(letters_to_find) + ']' matches = re.findall(pattern, text) print(matches) # 输出:['h', 'e', 'e'] ``` ### 方法4:使用`str.count()`统计每个字母出现次数 如果你不仅想知道字母是否存在,还想统计每个字母的出现次数,可以使用`str.count()`: ```python text = "hello world she said" letters_to_find = ['h', 'e', 'x'] # 统计每个字母的出现次数 counts = {letter: text.count(letter) for letter in letters_to_find} print(counts) # 输出:{'h': 2, 'e': 2, 'x': 0} ``` ### 方法5:结合`find()`进行多次查 虽然`find()`一次只能查一个子串,但你可以将其放在循环中进行多次查: ```python text = "hello world she said" letters_to_find = ['h', 'e', 'x'] # 使用 find()每个字母第一次出现的位置 positions = {letter: text.find(letter) for letter in letters_to_find} print(positions) # 输出:{'h': 0, 'e': 1, 'x': -1} ``` ### 总结 如果你想在一个字符串中查多个字母或子串,`str.find()` 不是最合适的方法,因为它只能逐一查。更好的方法包括: - **列表推导式**:查哪些字母存在。 - **字典记录位置**:记录每个字母的所有出现位置。 - **正则表达式**:灵活查多个模式。 - **`str.count()`**:统计每个字母的出现次数。 - **`find()`结合循环**:逐一查每个字母的第一次出现位置。 选择哪种方法取决于你的具体需求。如果你有更多的具体需求或问题,请告诉我,我可以提供更详细的帮助。 ### 知识点 1. **列表推导式**:简洁地创建列表,结合条件过滤。 2. **正则表达式**:灵活查多个模式或字符。 3. **字符串方法**:如`str.count()`、`str.find()`等用于字符串操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值