在C中的双字符指针中查找字符串的方法?

时间:2012-09-03 14:53:14

标签: c string

我有char **s; 并将其发送到func:

func(&s);

bool func(char ***p);

现在,我想找出s中是否存在特定字符串; 我能做到:

while (*s) {
if (strcmp(*s, "MyString") == 0) found;
s++;
}

但有没有做到这一点的捷径? function'func'可以填充有限且预定义的特定字符串。

由于 拉姆

5 个答案:

答案 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数组的数组),你需要遍历每个项目并检查它是否匹配。您可以使用strcmpstrstr,但这并不重要。

答案 4 :(得分:0)

只需修改你的while循环,如下所示..

while (**s) 
{
if (strcmp(**s, "MyString") == 0) found;
s++;
}