2

我有一个char **s; 它被发送到一个函数:

func(&s);

bool func(char ***p);

现在,我想查找 s 中是否存在特定字符串;我可以:

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

但是有什么捷径可以做到这一点吗?函数 'func' 可以填充有限和预定义的特定字符串。

谢谢拉姆

4

5 回答 5

1

查看函数strstr查找一个字符串在另一个字符串中的第一次出现。

于 2012-09-03T14:55:12.673 回答
0

并非如此,标准 C 库只有基本的函数来操作字符串。几乎不支持字符串数组(或其他“复杂”数据结构,如链表......)。

也就是说,既然每个人都需要这些,你应该检查链接到你的代码的库和实用程序。如果你给我们一份清单,我们也许可以指出一些事情。

于 2012-09-03T14:58:59.387 回答
0

确实有strstrC 标准库的功能,它在另一个字符串中找到第一次出现的子字符串。让我们假设它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);
}
于 2012-09-03T15:00:59.563 回答
0

不,C 标准库中没有在字符串数组中查找字符串的函数。

由于您有一个字符串数组(或更准确地说是一个数组char数组),因此您需要遍历每个项目并检查它是否匹配。您可以使用strcmpor strstr,但这并不重要。

于 2012-09-03T15:04:36.917 回答
0

只需按如下方式修改您的while循环..

while (**s) 
{
if (strcmp(**s, "MyString") == 0) found;
s++;
}
于 2012-09-03T15:47:31.967 回答