2014-10-14 2 views
0
void decode(char *str, int j) 
{ 
int i; 
char s[100]=""; 
i = strlen(str); 
//Print each uppercase character in the string 
if(j<i) 
{ 
    if(isupper(str[j])) 
    { 
     strcat(&str[j], s); 
     j++; 
     decode(str, j); 
    } 
    else 
    { 
     j++; 
     decode(str, j); 
    } 
} 
else 
    printf("%s\n", s); 
} 

이 함수는 str (대수)의 대문자 만 인쇄합니다. 그러나 인쇄 된 것은 현재 빈 공간입니다. 뭔가 strcat에 대한 나의 이해가 잘못되었다. 그것이 상단에 선언 된 문자 배열에 대해 그렇게 작동하는지 잘 모르겠습니다. 비어있는 것으로 선언 되더라도 여전히 추가됩니까? char 배열에 대한 빈 선언을 꺼내면 여전히 비어 있습니다. 어떤 도움을 주셔서 감사합니다.C에서 빈 문자열에 연결 하시겠습니까?

+2

'strcat'에 인수 순서를 확인하십시오. –

+0

@OliverCharlesworth가 맞습니다. strcat 정의를 확인하십시오. void strcat (char * dest, char * src) { while (* dest) dest ++; while (* dest ++ = * srC++); }'' –

+0

나는 다른 방법으로 가지고 있었고 어떤 이유로 든 빈 공간 만 출력했습니다. – bibzuda7

답변

0

만약 내가 <이라면 스택에 선언되어있는 s를 출력 할 것이고 함수가 시작될 때 항상 비어있을 것입니다. 디코드 기능에 전달하려고 할 수 있습니다. 재귀를 사용하는 대신 문자열을 반복하는 것이 더 나을지 모르지만.

+0

슬프게도 재귀를 사용해야합니다. 또한 J는 0이며, main에서 선언되므로 재귀 호출 중에 다시 선언되지 않으며 항상 0보다 큽니다. 이것은 문자열의 모든 문자를 검사하는지 확인하는 것입니다. – bibzuda7

+0

오하이오! 대단히 고마워요. 내가 잘못한 것을 이해합니다. 재귀 중에 다시 선언되지 않도록 외부에 다른 문자열을 선언해야합니다. 고맙습니다! – bibzuda7

+0

함수 밖에서 선언하고 인수로 전달한 후 대문자가 아닌 전체 문자열을 인쇄합니다. – bibzuda7

관련 문제