我是C的新手,试图做一个变位查找器,但它不能正确工作,我不知道我错在哪里。它的工作原理是使用两个独立的整数数组counter1
和counter2
计算两个不同字符串中的字母数。然后,它应该比较每个计数器中的值并检查任何不匹配,但由于某种原因,它打印了两种可能的结果,而不是正确的结果。任何帮助赞赏!
#include <stdio.h>
#include <string.h>
int main(){
//Letter counter for each string
int counter1[] = {0, 0, 0, 0};
int counter2[] = {0, 0, 0, 0};
// Strings to be checked
char s1[] = "abcd";
char s2[] = "dcba";
//Checks letter count in string 1
for (int i = 0; i < strlen(s1); i++) {
if (s1[i] == ' ') {
continue; }
else if (s1[i] == 'a') {
counter1[0] += 1; }
else if (s1[i] == 'b') {
counter1[1] += 1; }
else if (s1[i] == 'c') {
counter1[2] += 1; }
else (s1[i] == 'd'); {
counter1[3] += 1; }
}
// Checks letter count in string 2
for (int i = 0; i < strlen(s2); i++) {
if (s2[i] == ' ') {
continue; }
else if (s2[i] == 'a') {
counter2[0] += 1; }
else if (s2[i] == 'b') {
counter2[1] += 1; }
else if (s2[i] == 'c') {
counter2[2] += 1; }
else (s2[i] == 'd'); {
counter2[3] += 1; }
}
//Checks for mismatches in the letter counters
int flag = 0;
int counterLen = sizeof(counter1)/sizeof(int);
for (int i = 0; i < counterLen; i++ ) {
if (counter1[i] != counter2[i]) {
flag++; }
}
//Tells user if it's an anagram or not
if (flag == 0) {
printf("Anagram!"); }
else (flag != 0); {
printf("Not Anagram!"); }
}
1条答案
按热度按时间j5fpnvbx1#
这个
在
s1[i] == 'c'
情况下执行“无关1”中的代码。否则,它执行
(s1[i] == 'd');
,通过计算布尔表达式并忽略结果,因为它不用于任何东西,特别是不用于if
,因为没有。然后它无条件地执行“无关2”中的代码。在显示的代码中,您至少有三次非模式。
我假设“无条件”的结果是这样或那样的(对不起,这里没有详细说明,因为你似乎实际上在问什么是你错过了什么。..)在你的“它打印两种可能的结果”观察。