2012-08-07 151 views
0

我想编写一个程序,它将从给定的字符串中获取子字符串。将多个字符串分别放入一个数组中

然后,程序将检查子字符串是否是回文。如果回文,它会将它们列在其他任何地方,然后它将整理出独特的回文。

但是,有没有任何过程,以便我可以将多个字符串放入数组中?

我已经写了一个程序,将计数,有多少个子字符串是回文,但是,我无法弄清楚如何从它们中计算唯一的回文。

我的代码是在这里如下:

#include<stdio.h> 
#include<malloc.h> 
#include<string.h> 
char* substring(char*,int,int); 
int is_palindrome(char array[],int length); 
int main() 
{ 
    char string[85],*pointer; 
    int position,length,temp,string_length,pesky; 
    printf("enter a string\n"); 
    while(gets(string)){ 
     position=1,length=2; 
     temp=string_length=pesky=strlen(string); 
     while(position<=string_length){ 
      while(length<=temp){ 
       pointer=substring(string,position,length); 
       if(is_palindrome(pointer,length)==1){pesky++;puts(pointer);} 
       free(pointer); 
       length++; 
      } 
      position++; 
      temp--; 
      length=2; 
     } 
     printf("The string '%s' contains %d palindromes.\n",string,pesky); 
    } 
    return 0; 
} 
char* substring(char *string,int position,int length) 
{ 
    char *pointer; 
    int c; 
    pointer=malloc(length+1); 
    if(pointer==NULL){ 
     printf("unable to locate memory.\n"); 
     exit(EXIT_FAILURE); 
    } 
    for(c=0;c<position-1;c++){ 
     string++; 
    } 
    for(c=0;c<length;c++){ 
     *(pointer+c)=*string; 
     string++; 
    } 
    *(pointer+c)='\0'; 
    return pointer; 
} 
int is_palindrome(char array[],int length) 
{ 
    int k,j,o=0; 
    for(k=length-1,j=0;k>j;k--,j++){ 
     if(array[k]!=array[j]){ 
     o=1; 
     break; 
     } 
    } 
    if (o==0) {return 1;} 
    else {return 0;} 
} 
+4

避免使用获取。他们非常危险。 – perilbrain 2012-08-07 12:11:57

+0

我不明白你@Mechanicalsnail ..我在代码中有错误。我现在编辑它..! – 2012-08-07 12:18:29

+0

你的代码太糟糕了......( – Eregrith 2012-08-07 12:23:39

回答

0

为了存储各种串,你将需要字符数组的指针。当你将你的子字符串分离出来时,你将这个子字符串复制到一个malloced内存区域中,然后把返回的指针放到你的char指针数组中。

因此,类似下面的内容将定义字符数组以及当前在数组中的字符指针的数量。

char *pArrayStrings [100]; 
int iArrayStringsIndex = 0; 

此时您将拥有一个char指针数组。然后,您可以在数组中搜索,以确定回文是否已被找到。像下面这样。

{ 
    int iLoop = 0; 
    // search the array to see if this palindrome is already there 
    for (iLoop = 0; iLoop < iArrayStringsIndex; iLoop++) { 
     if (strcmp (pArrayStrings[iLoop], pointer) == 0) { 
      // found a match for this palindrome 
      break; 
     } 
    } 
    if (iLoop >= iArrayStringsIndex) { 
     // this is a new palindrome that is not in the array 
     pArrayStrings[iArrayStringsIndex] = pointer; 
     iArrayStringsIndex++; 
    } 
} 

以上strcmp()功能是区分大小写的,所以你可能需要使用比较不敏感的情况下。

我还没有试过编译这段代码,所以可能会出现一个错误,但是这将是一个通用的方法,应该让你接近你想要的。

一旦你完成了,你可以遍历数组,并执行一个free()来释放malloced内存。

+0

hey bro,非常感谢。 但你在代码中有一个小小的错误 pArrayStrings [iArrayStringsIndex] =指针;无效 所以我用 代替它pArrayStrings [iArrayStringsIndex] = malloc的(长度+ 1); strcpy(pArrayStrings [iArrayStringsIndex],指针); 现在它工作完美 – 2012-08-07 21:02:30

相关问题