C编程拼字游戏类型

时间:2015-09-27 23:05:31

标签: c arrays string

我试图弄清楚如何测试两个字符串,看看名为“target”的数组中的字母是否包含在数组“str1”中。如果目标中的所有字母都可以在str1中找到,则testWord返回true,否则返回false。这是我到目前为止的代码,在找到一个字母后停止。如何在str1的其余部分循环?

    #include <stdio.h>
int testWord(char str1[], char target[]);

int main() {
    char str1 [8] = {'q','i','j','i','b','o'};
    char target [3] = {'j','i','b'};
    int a= testWord(str1, target);
    printf("%d", a);
    return 0;
}

int testWord(char str1[], char target[]) {
    for(int i = 0; i < sizeof(*str1) ; i++) {
        for (int j = 0; j < sizeof(*target); j++) {
            if (strstr(str1, target)) {
                printf("%s%c%s\n","Target letter ", target[i], " was found");
                //delete letter from set
                str1[i - 1] = str1[i];
                i++;
            }
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您的代码中存在许多错误,

  1. 正确初始化数组,但它们不是个字符串。要使它们成为意义上的有效字符串,您需要nul终止它们,

    char str1[8]   = {'q', 'i', 'j', 'i', 'b', 'o', '\0'};
    /*                                                ^ nul */
    char target[3] = {'j', 'i', 'b', '\0'};
    /*                                 ^ nul */
    
  2. 您使用sizeof运算符错误

    sizeof(*str1)
    

    总是会向您1提供,因为str1的类型为char *,因此*str1的类型为charsizeof(char)为定义1

    了解sizeof运算符,它不返回字符串的长度,它在编译时计算参数,并给出大小写的类型或大小一个数组。您的不是数组,即使您在参数定义中指定了大小,它也会转换为char *类型的指针。

  3. 这些只是两个错误,但是对于这么少量的代码来说,它们是很多错误。