将数组复制到较低位置时,Anagrams 函数不起作用

问题描述 投票:0回答:1

所以我有一个接受两个字符串值的字谜函数。 两个字符串都用char[100]初始化,输入是用户通过键盘输入。

bool isAnagram(char* pattern, char* string) {
    
    int count[256] = {0};
    int count2[256] = {0};
    int i;
    
    for (i = 0; pattern[i] && string[i]; i++) {
        count[pattern[i]]++;
        count2[string[i]]++;
        
    }
    if (pattern[i] || string[i]) {
        return false;
        
    }
    
    for (i = 0; i < 256; i++) {
        if (count[i] != count2[i]) {
            return false;
        }
    }
    return true;
    
}

但是这个函数有一个大问题:它区分大小写。我想要所有字谜,包括不区分大小写。

我尝试了许多不同的方法将字符串复制到新的临时小写数组。

bool isAnagram(char* pattern, char* string) {
    char tempstr[100];
    char tempstr2[100]; 
    int count[256] = {0};
    int count2[256] = {0};
    int i;
    for (i = 0; i < strlen(pattern); i++) {
        tempstr[i] = tolower(pattern[i]);
    }
    for (i = 0; i < strlen(string); i++) {
        tempstr2[i] = tolower(string[i]);
    }
    for (i = 0; tempstr[i] && tempstr2[i]; i++) {
        count[tempstr[i]]++;
        count2[tempstr2[i]]++;
        
    }
    if (tempstr[i] || tempstr2[i]) {
        return false;
        
    }
    
    for (i = 0; i < 256; i++) {
        if (count[i] != count2[i]) {
            return false;
        }
    }
    return true;
    
    
}

这只是我尝试过的一种方法。我什至尝试了完全不同的制作字谜的方法。无论我做什么,我都无法复制数组,同时也无法正确检查小写字母的字谜。

老实说我感到很恼火。最近压力很大,我都不知道自己做错了什么。非常感谢任何帮助。

arrays c pointers
1个回答
0
投票

这是您的解决方案。你非常接近——我只稍微修改了你的代码。请注意 tolower() 的用法及其在代码中的位置。这将导致计数数组按照您的计划递增。这会导致解决方案不区分大小写,如输出所示。

#include <stdio.h>
#include <ctype.h> /* tolower() */
    
bool isAnagram(char* pattern, char* string) 
{
    int count[256] = {0};
    int count2[256] = {0};
    int i;
    
    for (i = 0; pattern[i] && string[i]; i++) {
        count[tolower(pattern[i])]++;   /* added tolower() */
        count2[tolower(string[i])]++;   /* added tolower() */
    }
    if (pattern[i] || string[i]) {
        return false;
    }
    for (i = 0; i < 256; i++) {
        if (count[i] != count2[i]) {
            return false;
        }
    }
    return true;
    
}


int main () 
{
    printf("%s\n", isAnagram("Batman", "Manbat")?"TRUE":"FALSE");
    printf("%s\n", isAnagram("Batman", "Cat")?"TRUE":"FALSE");
    printf("%s\n", isAnagram("Strut", "Trust")?"TRUE":"FALSE");
  
    return(0);
}

输出:

TRUE
FALSE
TRUE
© www.soinside.com 2019 - 2024. All rights reserved.