这段代码可能有什么问题? 我认为错误是第一个for循环,我试图将char转换为int。是否有任何其他方法可用于检查字符串是否为anagram?
# include <stdio.h>
#include <stdlib.h>
# define NO_OF_CHARS 256
void areAnagram(char *str1, char *str2)
{
int count1[NO_OF_CHARS] = {0};
int count2[NO_OF_CHARS] = {0};
int i;
for (i = 0; str1[i] && str2[i]; i++)
{
int a = str1[i] - '0';
int b = str2[i] - '0';
count1[a]++;
count2[b]++;
}
if (str1[i] || str2[i])
printf("No");
for (i = 0; i < NO_OF_CHARS; i++)
if (count1[i] != count2[i])
printf("No");
printf("Yes");
}
int main(void)
{
char *str1;
char *str2;
scanf("%s", str1);
scanf("%s", str2);
areAnagram(str1, str2);
return 0;
}
在运行时发出分段错误错误。
PS - 如果str1中的所有字符在str2中出现的次数相同且str2与str1的长度相同,则字符串str1是str2的字谜
答案 0 :(得分:1)
您从未为char *str1;
和char *str2;
分配任何内存。像这样调整你的代码:
#define MAX_STR_LEN 100
int main(void)
{
char str1[ MAX_STR_LEN ];
char str2[ MAX_STR_LEN ];
scanf("%s", str1);
scanf("%s", str2);
areAnagram(str1, str2);
return 0;
}
答案 1 :(得分:0)
您只需要一个计数数组 WebElement status = driver.findElement(By.xpath("//div[@class='span4']/a[@class='status']/span"));
String st = status.getText();
assertEquals(st, "CLOSED");
。然后通过str1(count
)递增count
数组元素,并通过str2(count[str1[i]]++;
)递减count
数组元素。如果count[str2[i]]--;
的所有元素都为零,那么它就是字谜。
答案 2 :(得分:0)
#include<stdio.h>
#include<conio.h>
void main()
{
char s[30],s1[30];
int i,j,count=0,count1=0;
clrscr();
printf("enter 2 strings\n");
gets(s);
printf("\n");
gets(s1);
for(i=0,j=0;s[i]!='\0',s1[j]!='\0';i++,j++)
{
count=count+(int)s[i];
count1=count1+(int)s1[j];
}
s[i]='\0';
printf("\n%d",count);
printf("\n%d",count1);
if(count==count1)
printf(" \n\n string is anagram ");
else
printf(" \n\n string is not anagram ");
getch();
}