如何在c中匹配两个字符串

时间:2014-06-18 12:10:26

标签: c string

如何检查字符串"HEAA5"是否与任何字符串("HE+++""HEAA+""HEA++""HC+++""HCA++")匹配给定数组+表示任何字符。

此示例中HEAA5匹配HE+++HEAA+HEA++

2 个答案:

答案 0 :(得分:2)

您可以编写一个简单的函数来比较两个字符串的相等性,当模式中存在+时跳过比较。

我使用的算法是:

  • 只要没有人到达目的地(NULL),就会并行扫描strpattern
  • 如果当前pattern字符为+,则继续扫描。
  • 如果当前的strpattern个字符不匹配,则返回false。
  • 扫描完成后如果两个字符串到达​​结尾,则返回true,否则返回false,因为其中一个字符串剩余不匹配字符。

例如:

#include <stdio.h>

int match(const char *str, const char *pattern)
{
    for (; *str && *pattern; ++str, ++pattern) {
        if (*pattern == '+') continue;
        if (*str != *pattern) return 0;
    }
    return !(*str || *pattern);
}

int main()
{
    const char *str = "HEAA5";
    const char *pattern[] = { "HE+++", "HEAA+", "HEA++", "HC+++", "HCA++" };

    for (int i = 0; i < 5; ++i) {
        printf("%s %s %d\n", str, pattern[i], match(str, pattern[i]));
    }
    return 0;
}

(Live demo here)

答案 1 :(得分:0)

String是C中的一个字符数组。所以你要做的就是检查HEAA5的每个字符是否= =输入字符串的每个字符。还要检查输入的字符串是否是5个字母的字符串使用strlen。如果输入的字符串的字符是'+',请检查字符串的下一个字母。

当输入的字符串中没有'+'时,另一种方法是使用评论中提到的strcmp