我应该如何使用 strcmp() 检查是不是在更大的字符串中找到了一个字符串?

Posted

技术标签:

【中文标题】我应该如何使用 strcmp() 检查是不是在更大的字符串中找到了一个字符串?【英文标题】:How should I use strcmp() to check whether a string is found in a larger string?我应该如何使用 strcmp() 检查是否在更大的字符串中找到了一个字符串? 【发布时间】:2022-01-16 06:44:47 【问题描述】:

问题很简单。我必须检查一个字符串是否是一个字符串的子字符串。

#include <stdio.h>
#include <string.h>

int main() 
    char *a = "Aristotle was not a good a philosopher";
    int i = 1;
    if (strcmp(a, "good") < 0) 
          return i;
    
    return 0;

【问题讨论】:

为什么不使用 strstr? 【参考方案1】:

使用函数strcmp 没有太大意义。相反,您应该使用函数strstr

return strstr( a, "good" ) != NULL;

return strstr( a, "good" ) == NULL;

取决于字符串 a 中是否存在字符串“good”。

【讨论】:

【参考方案2】:

莫斯科的弗拉德回答正确的方法是使用strstr

如果您出于某些(未知)原因需要使用strcmp,那么您的代码需要一个循环 (另请注意,strcmp 在字符串相同的情况下返回 0)

类似于下面的内容(请注意,下面没有完整性检查来检查 subset_string 是比原始流短还是长等。)

int main() 
char *a = "Aristotle was not a good a philosopher";
char *word_to_find = "good";
for(int i=0;i< (strlen(a)-strlen(word_to_find));i++) 

 if (strcmp((a+i), b) == 0) 
      return 0;

return 1;

【讨论】:

以上是关于我应该如何使用 strcmp() 检查是不是在更大的字符串中找到了一个字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得在更大矩阵上训练的 SVM 以对不同大小的矩阵进行分类

ToolStripMenuItem 更大的垂直填充,或在更大的 ToolStripMenuItem 中垂直居中文本

如何在函数中使用 strcmp() 时修复预期的“const char *”但参数的类型为“char **”

在更大的数据表上为每个用户选择第一行/最后一行的 SQL 性能

Oracle - 如何检查多条记录中的值以及一个值是不是匹配 - 将其用于更大的数据集

在更大的 <form> 中嵌入 HTML <form>?