特定の文字列から部分文字列を取得するプログラムを作成したいと考えています。
次に、プログラムは部分文字列が回文かどうかをチェックします。回文の場合、他の場所にそれらをリストしてから、一意の回文を並べ替えます。
しかし、配列に複数の文字列を個別に配置できるプロセスはありますか??
回文である部分文字列の数を数えるプログラムを作成しましたが、それらから一意の回文を数える方法がわかりません。
私のコードは以下のとおりです。
#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;}
}