我有一个char **s;
它被发送到一个函数:
func(&s);
bool func(char ***p);
现在,我想查找 s 中是否存在特定字符串;我可以:
while (*s) {
if (strcmp(*s, "MyString") == 0) found;
s++;
}
但是有什么捷径可以做到这一点吗?函数 'func' 可以填充有限和预定义的特定字符串。
谢谢拉姆
查看函数strstr
查找一个字符串在另一个字符串中的第一次出现。
并非如此,标准 C 库只有基本的函数来操作字符串。几乎不支持字符串数组(或其他“复杂”数据结构,如链表......)。
也就是说,既然每个人都需要这些,你应该检查链接到你的代码的库和实用程序。如果你给我们一份清单,我们也许可以指出一些事情。
确实有strstr
C 标准库的功能,它在另一个字符串中找到第一次出现的子字符串。让我们假设它s
是一个指向字符串的指针。
if (strstr(*s, "MyString") != NULL) {
/* found */
} else {
/* not found */
}
如果s
是字符串数组,则必须遍历数组,并将当前字符串和子字符串与strstr
.
#include <stddef.h>
#include <string.h>
int
f(char const **p, char const *q, size_t nmemb)
{
for (size_t i = 0; i < nmemb; ++i)
if (strstr(p[i], q) != NULL)
return 1;
return 0;
}
如果所有字符串的大小都相同,则可以使用 Indeed strcmp
。
#include <stddef.h>
#include <string.h>
int
f(char const **p, char const *q, size_t nmemb, size_t size)
{
for (size_t i = 0; i < nmemb; ++i)
if (strncmp(p[i], q, size) == 0)
return 1;
return 0;
}
另一种解决方案是对数组进行排序,然后搜索您的元素。
#include <stddef.h>
#include <stdlib.h>
static int
cmp(void const *p, void const *q)
{
return strcmp((char const *)p, (char const *)q);
}
int
search(char const **p, char const *q, size_t nmemb, size_t size)
{
return bsearch(q, p, nmemb, size, cmp);
}
void
sort(char const **p, size_t nmemb, size_t size)
{
qsort(p, nmemb, size, cmp);
}
不,C 标准库中没有在字符串数组中查找字符串的函数。
由于您有一个字符串数组(或更准确地说是一个数组char
数组),因此您需要遍历每个项目并检查它是否匹配。您可以使用strcmp
or strstr
,但这并不重要。
只需按如下方式修改您的while循环..
while (**s)
{
if (strcmp(**s, "MyString") == 0) found;
s++;
}