C에서 회문이되는 첫 단어의 시작 부분을 찾으시겠습니까?
예 : Hello mom and dad, how is it going?
mom
이 첫 번째입니다.회문문 인 첫 단어의 시작 부분을 찾으십시오.
가장 효율적인 방법은 무엇입니까?
의 char *의 find_first_palindrome 말씀으로 (숯불 * 입력)
C에서 회문이되는 첫 단어의 시작 부분을 찾으시겠습니까?
예 : Hello mom and dad, how is it going?
mom
이 첫 번째입니다.회문문 인 첫 단어의 시작 부분을 찾으십시오.
가장 효율적인 방법은 무엇입니까?
의 char *의 find_first_palindrome 말씀으로 (숯불 * 입력)
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";
}
...이 모든 것 전에 코드를 올바르게 포맷하십시오. –
여기 내 해결책이 있습니다. 그것은 효과적이지만, 가장 효율적인 방법이 아닐 수도 있습니다. 그것이 도움이되기를 바랍니다.
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;
}
#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;
}
에 오신 것을 환영합니다 스택 오버플로합니다. 이미 시도한 것을 표시해야하며 숙제 태그를 게시물에 추가 할 수도 있습니다. –
우리에게 무엇을 시도해 봤습니까? 그럼 우린 당신을 도울 것입니다 .. –
숙제 인 경우, 그대로 태그를 달아주세요. –