0

C の回文である最初の単語の先頭を見つけますか?
例:Hello mom and dad, how is it going?
momは最初のものです。

最も効率的な方法は何ですか?

char *find_first_palindrome(char *input)

4

3 に答える 3

1

これが私の解決策です。それはうまくいきますが、最も効率的な方法ではないかもしれません。それがあなたを助けることができることを願っています。

int find(char* c)//for single word
{
    int n=strlen(c);
    for(int i=0;i<n/2;i++)
    {
        if (c[i]!=c[n-i-1])
            return false;
    }
    return true;
}

char* findlong (char* lc)//for long sentence
{
    int i;
    char* end=lc+strlen(lc);
    for(;;)
    {
        for( i=0;lc[i];i++)
        {
            if(lc[i]==' ')
            {
                lc[i]='\0';
                break;
            }
        }
        if(find(lc) && !ispunct(*lc))//modified here,add !ispunct(*lc) to make it more robust.
            return lc;

        lc += i+1;
        if (lc>end)     //modified here. add this sentence.
        {
            printf("no word found!\n");
            return NULL;
        }
    }
}

int main()
{
    //test cases
    char b[]="fasdg";
    char c[]="Hello, mom and dad, how is it going?";
    char d[]="Hello , mom and dad, how is it going?";//the single comma won't be returned
                                                     //as a palindrom       

    char* result=findlong(c);
    if (result)
        printf("%s\n",result);

    return 0;
}
于 2012-07-27T06:40:55.110 に答える
0

単語ごとに取得し、等しい場合は最初と最後の文字のみを確認し、さらに検証を続けるか、次の単語に進みます。

main()
{
   string  a =  "Hello mom and dad, how is it going?";
   printf("first_palindrome word = %s",first_palindrome(a));
}

char * first_palindrome(string abc)
{

  for(i=0;i<number_of_words;i++)
  { 
    write logic will send word by  word...
    if(palindrome(word))
    {
       return word;
    }
  }
 return "no_word_found";
}
于 2012-07-27T04:51:10.590 に答える
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int isPalindrome(const char *str){
    const char *front, *back;
    front=str;
    back =str + strlen(str)-1;
    for(;front<back;++front,--back){
        while(!isalpha(*front))++front;//isalnum?
        while(!isalpha(*back))--back;
        if(front > back || tolower(*front)!=tolower(*back))
            return 0;
    }
    return 1;
}

int main(){
    const char *data="Hello mom and dad, how is it going?";
    char *p, *src;
    p=src=strdup(data);
    for(;NULL!=(p=strtok(p, " \t\n,.!?"));p=NULL){
        if(isPalindrome(p)){
            printf("%s\n", p);
            break;
        }
    }
    free(src);
    return 0;
}
于 2012-07-27T10:01:37.960 に答える