【问题标题】:Anagram problems字谜问题
【发布时间】:2015-01-13 09:02:18
【问题描述】:

我是这个论坛的新手,想寻求帮助。我正在尝试根据http://www.sanfoundry.com/c-program-...ings-anagrams/ 的代码修改一个字谜程序。 然而,这一次,我使用数组指针来获取用户的输入。我还创建了一个函数“check_input”,以确保输入仅包含字符并排除符号(!、#、$)。但是,当我运行程序时,它仍然接受这些符号并且不会像我想要的那样中断。请帮忙。

另外,我打算让程序以与小写字母相同的方式处理大写字母。这可以通过使用“stricmp”功能来实现吗?如果是这样,我应该在哪里放置该功能?替代方法也值得赞赏。

更新:对不起。我在底部添加了 check_input 代码。

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


int test_anagram(char *ptrArray1, char *ptrArray2);
int check_input(char array1[], char array2[]);

int main()
{
char array1[100], array2[100];
char *pArray1, *pArray2;
int flag;

pArray1 = array1;
pArray2 = array2;

printf("Enter the first word: \n");
gets(pArray1);

printf("Enter the second word: \n");
gets(pArray2);

check_input(pArray1, pArray2);

flag = test_anagram(pArray1, pArray2);
if(flag == 1){
    printf("\"%s\" and \"%s\" are anagrams.\n", pArray1,    pArray2);
}else{
    printf("\"%s\" and \"%s\" are not anagrams.\n", pArray1, pArray2);
}

return 0;
}

int test_anagram(char array1[], char array2[])
{
int num1[26] = {0}, num2[26] = {0}, i = 0;

while(array1[i] != '\0')
{
    num1[array1[i] - 'a']++;
    i++;
}

i = 0;
while(array2[i] != '\0')
{
    num2[array2[i] - 'a']++;
    i++;
}

for(i=0;i<26;i++)
{
    if(num1[i] != num2[i]){
        return 0;
    }
    return 1;
}


}

int check_input(char array1[], char array2[])
{
while(isalpha((int)array1) != 1){
    break;
}

while(isalpha((int)array2) != 1){
    break;
}
}

【问题讨论】:

  • 发布check_input函数的代码。
  • 两件事:首先是gets 早已被弃用,甚至从最新的C 标准中删除,它是不安全的,不应该使用。其次,您的指针pArray1pArray2 是多余的。当您将数组传递给函数时,数组无论如何都会衰减为指针,在其他情况下也是如此,因此不需要您的指针变量。
  • 至于你的问题,看看test_anagram函数中的最后一个循环,你确定你想要return 1;你放的语句吗?我建议您在调试器中逐行执行该循环。
  • @REACHUS 我已经为 check_input 添加了代码。
  • @JoachimPileborg 我已经为 check_input 添加了代码。

标签: c anagram


【解决方案1】:

您尚未(尚未)发布check_input() 函数的完整代码,但一个建议是在用户输入每个字符时验证输入。

您可以使用 f.e. getchar() 函数并检查输入的字符是否为字母,并将其转换为小写(或大写,如果您愿意)。

你可以像这样进行小写转换:

#include <ctype.h>

// ...
tolower('A');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2013-06-17
    • 2016-05-10
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多