检查字符串是否是字谜

时间:2016-01-30 18:46:08

标签: c segmentation-fault anagram

这段代码可能有什么问题? 我认为错误是第一个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的字谜

3 个答案:

答案 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();

}