2012-07-27 2 views
0

C에서 회문이되는 첫 단어의 시작 부분을 찾으시겠습니까?
예 : Hello mom and dad, how is it going?
mom이 첫 번째입니다.회문문 인 첫 단어의 시작 부분을 찾으십시오.

가장 효율적인 방법은 무엇입니까?

의 char *의 find_first_palindrome 말씀으로 (숯불 * 입력)

+2

에 오신 것을 환영합니다 스택 오버플로합니다. 이미 시도한 것을 표시해야하며 숙제 태그를 게시물에 추가 할 수도 있습니다. –

+0

우리에게 무엇을 시도해 봤습니까? 그럼 우린 당신을 도울 것입니다 .. –

+0

숙제 인 경우, 그대로 태그를 달아주세요. –

답변

0

GET 단어 만 처음보고 마지막 문자가 동일한 경우 다음 추가 검증을 계속하거나 다른 다음 단어에 대한 이동합니다.

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"; 
} 
+0

...이 모든 것 전에 코드를 올바르게 포맷하십시오. –

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; 
} 
+0

+1하지만 Cout은 C++가 아닙니다. 태그를 올바르게 읽으십시오. –

+0

yes.i 알고 있습니다. 그러나 cout <<는 printf()보다 약간 더 쉽게 입력 할 수 있습니다. 게다가 C++ 부분은 유효성 검사 부분에만 표시되고 실제로 그것을 해결하는 코드는 아닙니다. – duleshi

+0

나는 printf()를 사용하는 게 조금은 게으름이라는 것을 인정해야한다. ... – duleshi

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; 
} 
관련 문제