C语言string中的find()函数

在c++中,字符串类型string后面加上.find()的作用,是

	string str1, str2;
	int i;
	string str1 = "qwertyuuoesdi";
	string str2="uu";
	char c = 'q';
	i = str1.find(str2);<
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: string.find函数的源代码如下: ```c++ size_t find(const string& str, size_t pos = 0) const noexcept { // 从指定位置pos开始查找 if (pos >= size()) { return npos; } // 查找子字符串str的第一个字符 const char* result = std::strstr(data() + pos, str.data()); // 如果找到了子字符串 if (result != nullptr) { // 计算子字符串的索引并返回 return result - data(); } // 如果没有找到子字符串 return npos; } ``` 这段代码实现了string类的find函数。该函数用于在字符串查找指定子字符串,并返回第一次出现的位置索引。函数接收两个参数,第一个参数是要查找的子字符串,第二个参数是开始查找的位置,默认为0。如果找到了子字符串,则返回其在字符串的起始位置索引(索引从0开始),如果没有找到,则返回string定义的特殊常量npos。该函数利用了C语言标准库函数`strstr`来进行串匹配。函数首先判断指定的起始位置是否越界,如果越界则直接返回npos。然后使用`strstr`函数从指定位置开始查找子字符串,如果返回结果不为空指针,则说明找到了子字符串,通过计算其相对于原字符串的偏移量,即可得到其在字符串的位置索引,然后返回该值;否则,说明没有找到子字符串,返回npos。 ### 回答2: string.find函数是用于查找子字符串在字符串首次出现的位置的函数。以下是该函数的源代码: ```python def find(string, substring, start=0, end=None): """ 在字符串查找子字符串首次出现的位置。 :param string: 待查找的字符串。 :param substring: 要查找的子字符串。 :param start: 可选参数,指定查找的起始位置,默认为0。 :param end: 可选参数,指定查找的结束位置,默认为None,表示到字符串的末尾。 :return: 若找到子字符串,则返回首次出现的位置;否则返回-1。 """ if end is None: # 如果未指定结束位置,则设为字符串的末尾 end = len(string) for i in range(start, end - len(substring) + 1): if string[i:i + len(substring)] == substring: return i return -1 # 若未找到子字符串,则返回-1 ``` 这段代码定义了一个名为`find`的函数,它接受一个字符串`string`和一个子字符串`substring`作为参数,并可选地指定查找的起始位置`start`和结束位置`end`。函数通过遍历`string`可能包含`substring`的所有位置,逐个检查子字符串是否与当前位置开始的子串相等,如果找到相等的子串,则返回当前位置。如果在范围内遍历完全都没有找到相等的子串,则返回-1表示未找到。 函数的实现通过循环遍历的方式逐个比较子串是否与字符串的部分子串相等。它首先判断是否指定了结束位置,如果没有,则将结束位置设为字符串的末尾。然后,通过一个循环从起始位置开始遍历,每次在字符串取出与子串相同长度的部分子串,并与子串进行比较。如果相等,则返回当前位置。最后,若遍历完整个范围后都没有找到相等的子串,则返回-1。 ### 回答3: string.find函数的源代码如下: ```python def find(str, sub_str, start=0, end=None): """在字符串str查找子字符串sub_str的位置,并返回第一次出现的索引值。 Args: str (str): 要进行查找的字符串。 sub_str (str): 要查找的子字符串。 start (int, optional): 查找的起始位置,默认为0。 end (int, optional): 查找的结束位置,默认为None,表示查找到字符串的末尾。 Returns: int: 子字符串sub_str第一次出现的索引值,如果未找到则返回-1。 Raises: TypeError: 如果str或sub_str不是字符串类型则抛出TypeError。 """ if not isinstance(str, str) or not isinstance(sub_str, str): raise TypeError("参数str和sub_str必须是字符串类型") if end is None: end = len(str) for i in range(start, end): if str[i:i+len(sub_str)] == sub_str: return i return -1 ``` 这段代码定义了一个find函数,它接收一个待查找的字符串str和一个待查找的子字符串sub_str作为参数,可以指定查找的起始位置start和结束位置end(默认为字符串末尾)。 函数首先检查参数str和sub_str是否为字符串类型,如果不是则抛出TypeError。 接着,函数使用一个for循环遍历字符串str,从起始位置开始,逐个检查str的子字符串是否与sub_str相等。如果找到了与sub_str相等的子字符串,则返回该子字符串的索引值。 如果遍历完整个str后都没有找到与sub_str相等的子字符串,则返回-1。 这个find函数可以用于在字符串查找指定子字符串的位置,并返回第一次出现的索引值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值