我应该如何使用 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 性能