我有char **s;
并将其发送到func:
func(&s);
bool func(char ***p);
现在,我想找出s中是否存在特定字符串; 我能做到:
while (*s) {
if (strcmp(*s, "MyString") == 0) found;
s++;
}
但有没有做到这一点的捷径? function'func'可以填充有限且预定义的特定字符串。
由于 拉姆
答案 0 :(得分:1)
查看函数strstr
在另一个字符串中找到第一个字符串的出现。
答案 1 :(得分:0)
实际上,标准C库只有使用字符串操作的裸骨功能。对字符串数组(或链接列表等其他“复杂”数据结构......)的支持很少。
那就是说,因为每个人都需要这些,你应该检查链接到你的代码的库和实用程序。如果你给我们一个清单,我们可能会指出一些事情。
答案 2 :(得分:0)
确实有C标准库的函数strstr
,它在另一个字符串中找到第一次出现的子字符串。我们假设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;
}
如果您的所有字符串都具有相同的大小,则可以使用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);
}
答案 3 :(得分:0)
不,没有函数在C标准库中的字符串数组中找到字符串。
由于你有一个字符串数组(或更确切地说是一个char
数组的数组),你需要遍历每个项目并检查它是否匹配。您可以使用strcmp
或strstr
,但这并不重要。
答案 4 :(得分:0)
只需修改你的while循环,如下所示..
while (**s)
{
if (strcmp(**s, "MyString") == 0) found;
s++;
}