2013-10-22 6 views
1

그래서 단어를 입력해야하는 프로그램을 만들었습니다.이 프로그램은 회귀 식 (두 가지 방법 모두 같은 단어)인지 아닌지를 표시합니다.Palindrome 프로그램의 배열

#include <stdio.h> 
#include <string.h> 
int main(int argc, const char * argv[]){ 
    char word; 
    int length, counter; 

    printf("Please enter a word: "); 
    scanf("%c", &word); 

    int flag = 1; 

    for (counter = 0; counter < length && flag; counter++) { 
     printf("%c\t %c", word[counter], word[length - counter]) 
     if (word[counter] == word[length - counter - 1]){ 
      flag = 0; 
     } 
    } 
    if (flag) { 
     printf("%c is a palindrome!", word); 
    } 
    else { 
     printf("%c is NOT a palindrome!", word); 
    } 
} 

각 글자가 나란히 표시되도록 설정했습니다. 문자가 같지 않으면 플래그가 "throw됩니다"(0으로 설정 됨) 프로그램이 종료됩니다. "단어는 회문이 아닙니다!"

word [counter]가 말한 부분에 오류가 있습니다. 이는 subscript 된 값이 아님을 나타냅니다. 이 작업을하려면 어떻게해야합니까? 내가 잘못하고있는 다른 것이 있습니까?

+3

'문자 워드는,'숯하지 배열!? –

+0

'char word'는'word'가 문자라고 말합니다. 'char word []'는 단어를'array'로 만듭니다. –

+0

나는'flag = 0;을 추천한다. 'for'조건에서 테스트하기보다는 'break'를 사용하십시오. 그것은 누군가 당신의 코드를 더 쉽게 읽을 수있게 해줍니다. 문자 배열을 올바르게 사용하지 않는다는 것이 이미 지적되었습니다. 또한 왜 [counter]와'[length-counter]'를 출력하지만'[length-counter-1] '과 비교할 지 모르겠습니다. 'counter == 0 '(마지막 유효한 요소가'[length-1]'이래로.) – Floris

답변

2

char word;은 배열이 아닙니다. 이 char word[100];은 배열입니다. 또한 단어가 아닌 scanf("%c", &word);을 사용하여 단일 문자를 읽습니다 (문자열 또는 일련의 문자에서와 같이). 사용 :이 UB로 이어질 있도록

fgets (word , 100 , stdin) 

는 또한 length가 초기화되지 않았습니다.

+0

명시 적으로 배열의 길이를 반복하지 않아도된다. 대신 이것을 할 수있다. :'fgets (word, sizeof word, stdin)'. –

0

프로그램에서 수정하십시오. 정상적으로 실행됩니다.

#include <stdio.h> 
#include <string.h> 
int main() 
    { 
    char word[100]; 
    int length, counter; 

    printf("Please enter a word: "); 
    scanf("%s",word); 
    length=strlen(word); 
    int flag = 1; 

    for(counter = 0; counter < length/2 && flag; counter++) 
     { 
     if (word[counter] != word[length-counter-1]) 
     { 
      flag = 0; 
      break; 
     } 
    } 
    if (flag) 
    { 
     printf("%s is a palindrome!\n", word); 
    } 
    else { 
     printf("%s is NOT a palindrome\n!", word); 
    } 
} 
+0

100 자 이상의 단어를 입력하면 버퍼 오버플로가 발생한다. (C++ 컴파일러에서'scanf ("% 100s", word)'를 사용하라.) –

-2
**************************************************************** 
*    Simple Array Palindrome Program     *        
****************************************************************/ 
#include <iostream> 
using namespace std; 
int main(){ 
int arr_size; 
int flag=0; 
/***************************************** 
*    Array Size    * 
*****************************************/ 

cout<<"Enter The Array Size: \n->arr["; 
cin>>arr_size;cout<<" ]"; 
int arr[arr_size]; 
/***************************************** 
*    User_Input    * 
*****************************************/ 


for(int i=0;i<arr_size;i++){ 
cout<<"Enter Value For Arr[ "<<i<<" ] -> "; 
cin>>arr[i]; 
} 
/***************************************** 
*   Palindrome_Check   * 
*****************************************/ 


for(int k=0,j=arr_size-1;k<arr_size && j>-1;k++) 
{ 

if(arr[i]==arr[j]; 
{ 
flag++; 
} 

} 
/***************************************** 
*    Flag Check    * 
*****************************************/ 


if(flag==arr_size) { 
cout<<"Array Is Palindrome: "; 
} 
else 
{ 
cout<<"Array Is Not Palindrome: "; 
} 


} 
+0

'ostream'과'namespace'. – Quentin

+1

첫 번째로, C로 태그 된 질문에 대한 답변으로 C++ 코드를 제공하는 것은 잘못된 것입니다. 그러나 그 외에도 코드 전용 답변을주지 말고 코드가 어떻게 해결되는지 설명하십시오 OP의 문제. 아무도 컨텍스트에서 대답을 쉽게 배치 할 수있을 때 수행 한 작업을 파악하기 위해 코드를 살펴보고 싶어하지 않습니다. –