C の回文である最初の単語の先頭を見つけますか?
例:Hello mom and dad, how is it going?
mom
は最初のものです。
最も効率的な方法は何ですか?
char *find_first_palindrome(char *input)
C の回文である最初の単語の先頭を見つけますか?
例:Hello mom and dad, how is it going?
mom
は最初のものです。
最も効率的な方法は何ですか?
char *find_first_palindrome(char *input)
これが私の解決策です。それはうまくいきますが、最も効率的な方法ではないかもしれません。それがあなたを助けることができることを願っています。
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;
}
単語ごとに取得し、等しい場合は最初と最後の文字のみを確認し、さらに検証を続けるか、次の単語に進みます。
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";
}
#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;
}