如何正确找到另一个字符串中的匹配字符

炽热的

我想知道将字符串的单个字符与另一个整个字符串进行比较并找到匹配字符的最佳方法。我的代码中最重要的片段可能是用户输入请求:string text = get_string("text: ");以及我预定义的“比较”-string=char lowerabc[] = "abcdefghijklmnopqrstuvwxyz";现在,我想获取文本的第 n 个值并在 lowerabc 中找到匹配的字符。我的第一次尝试是使用 for 循环并将结束条件设置为它们的值匹配时,smth 像这样:for(int j=0;text[i] == lowerabc[j] ; j++){}但我发现这比较了两者的地址,因此没有意义。因此我偶然发现了 strcmp() 函数并编辑了代码以匹配零值作为结束条件:for(int j=0;strcmp(text[i], lowerabc[j])==0 ; j++){}但是一旦我编译它,它就会抛出错误:incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Werror,-Wint-conversion]对不起,但似乎我太固执了,无法区分这两个变量的本质差异,以至于它会对我说这样的话。因此,我想问一下进行此类比较的最有效方法是什么。非常感谢您的帮助

迈克猫

您可以使用strchr()从字符串中查找单个字符。

#include <stdio.h>
#include <string.h>

/* mock */
typedef char* string;
string get_string(const char* x) {
    static char ret[] = "hoge123abc";
    return ret;
}

int main(void) {
    string text = get_string("text:  ");
    char lowerabc[] = "abcdefghijklmnopqrstuvwxyz";

    for (int i = 0; text[i] != '\0'; i++) {
        char* res = strchr(lowerabc, text[i]);
        if (res != NULL) {
            int idx = res - lowerabc;
            printf("%c is found at lowerabc[%d]\n", text[i], idx);
        } else {
            printf("%c is not found in lowerabc\n", text[i]);
        }
    }
    return 0;
}

输出:

h is found at lowerabc[7]
o is found at lowerabc[14]
g is found at lowerabc[6]
e is found at lowerabc[4]
1 is not found in lowerabc
2 is not found in lowerabc
3 is not found in lowerabc
a is found at lowerabc[0]
b is found at lowerabc[1]
c is found at lowerabc[2]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章