2013-04-07 3 views
1

Я должен сделать программу, которая сообщает мне, является ли строка палиндром или нет, используя библиотеку string.h. Я написал следующий код, но выход всегда «палиндром»Проверьте, является ли слово палиндром с string.h

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 

int main() 
{ 
char a[100],b[100]; 
int i,k; 
printf("Type the string \n"); 
gets(a); 
k=strlen(a); 
for(i=0;i<strlen(a);i++) 
{ 
    a[i]=b[k]; 
    k--;      
}   //at the end of this code the string "b" should be the reverse of "a" 
k=strcmp(a,b); 
if (k!=0) //here I check if a=b or not 
{printf("palindrome");} 
else 
{printf("not palindrome");} 
getch(); 
return 0; 
} 

Пример: Когда мой вход «не» выход должен быть «палиндром», если вход «корабль» на выходе должно быть «не палиндром". Может ли кто-нибудь помочь мне найти то, что не так?

+2

Используйте к = StrLen (а) -1; вместо k = strlen (a); –

+0

@ DanilAsotsky он не работает ни –

+2

Это не связано с проблемами с алгоритмом, который вы внедрили, я просто чувствую, что должен комментировать что-то, что, по моему мнению, разработчикам следует начинать рано: A) Дайте значимые имена переменным, вы вам легче отлаживать свой собственный код, если вы это сделаете. B) Отформатируйте код последовательно, если у вас есть один оператор в предложении управления, либо пишите фигурные скобки, как и для нескольких операторов, либо отбрасывайте фигурные скобки. Выполнение того, что вы сделали, - это глазная болячка, которая препятствует пониманию кода. – StoryTeller

ответ

4

Я думаю, что это линия

a[i]=b[k];

Не это поместить содержимое b[k] (которые вы не инициализированы) в a[i] (который вы заполненного ГЭТ)? Это перезаписывает тестовое значение в a с пробелами (или что-то в памяти b). Разве вы не должны делать наоборот?

Но лучше не делать этого вообще - вы можете просто сравнить символы на месте в массиве.

k=strlen(a); 
for(i=0; i<k/2; i++) 
    if(a[i] != a[k-i]) 
     return "Not Palindrome"; 
return "Palindrome";      
+0

Нет Я имел в виду, что вы должны 'b [k] = a [i]' –

0

Я установил ее для вас, обратите внимание на комментарии:

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 

int main() 
{ 
    char a[100],b[100]; 
    int i; 
    int stringLen; 
    printf("Type the string \n"); 
    gets(a); 
    stringLen = strlen(a); 
    for(i=0; i < stringLen; i++) 
    { 
     //First you want to copy to B not A... 
     //second, you need to remove "1" from the size cause array start from "0". 
     b[stringLen-1-i] = a[i];    
    }//at the end of this code the string "b" should be the reverse of "a" 

    if (strcmp(a,b) == 0) //0 mean equal ! 
    { 
     printf("palindrome"); 
    } 
    else 
    { 
     printf("not palindrome"); 
    } 
    getch(); 
    return 0; 
} 
0

strcmp() возвращает нулевое значение, если обе строки равны. Это должно быть что-то вроде этого:

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 

int main() 
{ 
    char a[100],b[100]; 
    int i,k; 
    printf("Type the string \n"); 
    gets(a); 
    k=strlen(a)-1; 
    for(i=0;i<strlen(a);i++) 
    { 
     b[i]=a[k]; //assign to b not to a 
     k--;      
    } 
    b[strlen(a)]='\0';//terminate the string with null character 
    //at the end of this code the string "b" should be the reverse of "a" 
    k=strcmp(a,b); 
    if (k==0) //here I check if a=b or not 
    {printf("palindrome");} 
    else 
    {printf("not palindrome");} 
    getch(); 
    return 0; 
} 
1
/** 
    ** Name: palindrome.c 
    ** Description: This program checks if a word is palindrome or not 
    ** Aldo Núñez Tovar 
    **/ 

    #include <stdio.h> 
    #include <string.h> 
    #include <stdlib.h> 

    int 
    isPalindrome (char* str) 
    { 
     char* str2 = str + strlen (str) - 1; 

     while (str < str2) 
     { 
      if (*str++ != *str2--) 
      { 
       return 0; 
      } 
     } 
     return 1; 
    } 

    int 
    main (void) 
    { 
     char* str = "racecar"; /* level, civic, rotor, racecar */ 

     printf ("Is %s palindrome? %s\n", str, isPalindrome (str)? "Yes": "No"); 
     return 0; 
    } 
+0

Добро пожаловать в Stack Overflow! Кодовые ответы не очень полезны. Измените свой ответ, чтобы объяснить, почему ваш код решает исходную проблему. –

Смежные вопросы