2012-08-07 148 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

相關問題