【发布时间】: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 标准中删除,它是不安全的,不应该使用。其次,您的指针pArray1和pArray2是多余的。当您将数组传递给函数时,数组无论如何都会衰减为指针,在其他情况下也是如此,因此不需要您的指针变量。 -
至于你的问题,看看
test_anagram函数中的最后一个循环,你确定你想要return 1;你放的语句吗?我建议您在调试器中逐行执行该循环。 -
@REACHUS 我已经为 check_input 添加了代码。
-
@JoachimPileborg 我已经为 check_input 添加了代码。