2015-02-03 3 views
-2

문제 - 포인터를 사용하여 문자열을 반대로하려면 반전 문자열을 인쇄하는 대신 내 코드 을 사용하고 문자열의 첫 번째 문자를 인쇄하고 있습니다.포인터를 사용하는 문자열 반전

#include<stdio.h> 

int main() 
{ 
    int i; 
    char n[100]; 
    char *ptr; 
    ptr = n; 
    char a[100]; 
    char *sptr; 
    sptr = a; 
    scanf("%s", n); 

    for(i=0;n[i]!=0;i++)//Calculating the size of the string 
     for(;(*sptr=*(ptr+i))!='\0';sptr++,ptr--) 
     { 
      ; 
     } 
    printf("%s",a); 
    return 0; 

} 
+2

이 사이트의 "[c] string reversal"은 * 상당 * 횟수의 조회수를 나타냅니다. 그리고 for 중첩 된 for 루프가 필요하지 않으므로 알고리즘을 다시 생각해보십시오. – WhozCraig

+0

당신은 중첩 된 루프를 가지고 있습니다. 즉, 내부적으로 'for' 루프는 반전을 수행하기위한 것으로, 문자열 길이를 계산하는 루프 내에 중첩되어 있습니다. 이것은 의도적입니까? –

+0

정말로 프로그램을 얻지 못했습니다. – eLemEnt

답변

1

문제가 두 가지입니다.

먼저 for 루프 이후에 ;이 누락되었습니다. 당신이 그것을 사용하기 전에 한 번 i을 줄일 필요가 범위를 벗어날

for(;(*sptr=*(ptr+i))!='\0';sptr++,ptr--) 

for(i=0;n[i]!=0;i++); //note the ; 

둘째, 사용 당신이있는 거 배열 인덱스입니다.

당신은

for(;(*sptr=*(ptr+i-1))!='\0';sptr++,ptr--) 

노트를 작성해야 IMHO, 당신은 간단한 일이 너무 복잡하고 있습니다. 보다 쉬운 논리를 생각해보십시오. 많이있다. live 예를 들어, Mr. WhozCraig의 코멘트에있는 링크를 따르십시오.

+1

[그냥 해보십시오] (http://ideone.com/YljESF) 그리고 모든 색인을 잊어 버리십시오. 그것이 포인터가있는 것입니다. – WhozCraig

+0

@WhozCraig Sir, Kudos !! 내가 의견을 upvote 수 있기를 바랍니다. :-) –