将多个字符串分别放入数组中

时间:2012-08-07 12:07:57

标签: c arrays string

我想编写一个程序,它将从给定的字符串中获取子字符串。

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

但是有没有任何进程可以让我可以在一个数组中单独放置多个字符串?

我写了一个程序,它会计算,有多少个子串是回文,但是,我无法弄清楚如何从它们中计算出独特的回文。

我的代码如下:

#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;}
}

1 个答案:

答案 0 :(得分:0)

为了存储各种子字符串,您需要一个char指针数组。当您将要复制到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内存。