【问题标题】:Checking if string contains substring in C [duplicate]检查字符串是否包含C中的子字符串[重复]
【发布时间】:2014-10-07 08:09:05
【问题描述】:

我想知道是否有办法在 char* 数组中查找 substring

我似乎无法从 Java 中找到与 Contains() 等效的 C

例如:

char *buff = "this is a test string. The string contains random text.";

假设我输入substringbuff 比较,看看substringbuff 中找到了多少次。

我能够找到第一次出现但多次出现的问题。有人可以帮助我吗?

【问题讨论】:

  • 那么你到底有什么不明白的呢?显而易见的是在找到第一个位置后重新开始搜索。如果您不知道这样做,是时候修改 (1) 数组和字符串在 C 中的工作方式,(2) 迭代语句在 C 中的工作方式。
  • 大家好,假设我有一个char* random 的值为ABCDSDGHFG 并且我想根据2 个索引值提取一个子字符串,我将如何检索它?基本上类似于 java 的东西会执行以下操作:substring(2, 5)

标签: c arrays string char


【解决方案1】:

有一个名为 strstr 的标准 C 库函数可以进行子字符串搜索:

#include <string.h>

char *strstr(const char *haystack, const char *needle);

The strstr() function finds the first occurrence of the substring needle
in the string haystack.  The terminating null bytes ('\0') are not compared.

【讨论】:

  • 如何查找多次出现?
  • 嗯,你可以使用第一个子串匹配的开始和子串本身的长度来计算一个新的起点,用于后续的子串搜索。或者,如果子字符串可以匹配自身,只需在最后一个结果后一个字符开始新的搜索。
  • Contains 在 Java 中返回多次出现吗?
  • 大家好,假设我有一个char* random,其值为ABCDSDGHFG,我想根据2 个索引值提取一个子字符串,我将如何检索它?基本上类似于 java 的东西会执行以下操作:substring(2, 5)
  • @isedev 是的,您对 Contains 方法的看法是正确的
【解决方案2】:

这样的函数被命名为strstr,并在头文件&lt;string.h&gt;中声明

来自 C 标准

7.23.5.7 strstr 函数 概要 1

#include <string.h>
char *strstr(const char *s1, const char *s2);

说明 2 strstr函数定位s2所指向的字符串中的字符序列(不包括终止空字符)在s1所指向的字符串中的第一次出现。

返回 3 strstr 函数返回一个指向已定位字符串的指针,如果未找到该字符串,则返回一个空指针。如果 s2 指向长度为零的字符串,则函数返回 s1。

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 2011-11-09
    • 2013-05-18
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    相关资源
    最近更新 更多