게시판

검색 결과: 118

, 송 준현님이 작성
 

저번에 strcat함수에 대해 질문을 하여 같은 주소값을 가져야 하기 때문에 오류가 발생한다고 알게되어 코드를 바꾸어 코딩을 하게 되었습니다.

아래 코딩은 가령 nurs  es run과 같은 띄어쓰기가 있는 문자열이 입력되었을 때, 띄어쓰기를 없애고 nursesrun과 같이 출력하기 위한 코딩입니다. 그 후, 회문이 맞는지 아닌지를 판별하려 합니다. 근데 출력결과가 계속 나오지 않아서 질문드립니다.

심사문제는 방향을 다르게 제시하고 있지만 처음에 생각한게 이 방법이라 이렇게 풀려고 하면 어떻게 코딩을 해야하는지 알고 싶습니다.

  strcat(s2, sar[i]);

(도장_ 관리자에 의해 편집됨 - 원문 제출일 2018년 8월 13일, 월요일, 오후 6:00 )

, 도장_ 관리자님이 작성
 

Unit 6을 참고해서 중단점을 설정하고 한 단계씩 실행해보기 바랍니다.

strcat 함수에서 s2에 값이 들어가지 않습니다.

strcat 함수가 동작하려면 char 문자 하나가 아니라 NULL로 끝나는 문자열이어야 합니다. "a"라면 실제로는 a + NULL로 된 문자열이어야 합니다.

원하는 방식으로 풀려면 strcpy 함수를 써야 합니다.

strcpy(&s2[i], sar[i]);


, 도장_ 관리자님이 작성
 
Unit 47.4의 코드를 참고하세요.

char *save[100]

save는 array of pointer to char입니다. 배열에 담긴 것은 pointer to char이므로 %p로는 출력할 수 있고, %s로는 출력할 수 없습니다.

, Jeon Pyo Soo님이 작성
 

안녕하세요.

질문이 있습니다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main() {

//공백잇는문자열 입력받아서 회문판별하기

char sentence[100];

char *save[100] = { NULL, };

scanf("%[^\n]s", sentence);

char sentence2[100];


char ptr = strtok(sentence, " "); 

int i = 0;

while (ptr != NULL) {

save[i] = ptr;

i++;

ptr = strtok(NULL, " "); //공백씩 끊어서 save배열에 저장했음

}

return 0;

}


일단 이상황에서 save라는 배열에 공백을 기준으로 입력받은 문장을 짤라서 하나씩 넣은것인데

save배열을 출력해볼때 printf("%s",save[0]); 이런식으로 출력을 하면 예외처리가 뜨더군요..혹시 어디가 잘못된지 알려주실수잇나요.

%p로 출력을하면 주소값은 나옵니다.. %s로했을때만출력이안됩니다.

, 김 대현님이 작성
 
문의한 코드는 삭제합니다.


코드를 이렇게 했는데 코딩도장 문제에서는 정답으로 나옵니다. 그런데 else if를 사용하면 위에 조건을 만족하면 다른 조건은 검사하지 않으므로 이 코드는 잘못된 코드 아닌가요? 지적 부탁드립니다.

(도장_ 관리자에 의해 편집됨 - 원문 제출일 2018년 6월 29일, 금요일, 오후 10:23 )

 

심사 문제를 통과했다면 문제가 의도한 대로 동작하고 있다는 뜻입니다.

코드에 대한 디버깅은 제공하지 않습니다.

어떤 코드가 실행되지 않는지 의심이 된다면 Unit 6 디버거 사용하기를 참고해서 한 단계씩 실행하며 실행되지 않는 코드가 있는지 확인하면 됩니다.


, 도장_ 관리자님이 작성
 

문의한 코드의 끝에 }가 빠졌습니다.

이전 문의와 중복되는 부분은 다음 답변을 참고하세요.

https://dojang.io/mod/forum/discuss.php?d=311&parent=726

word에 &를 사용하는 문제는 다음과 같습니다.

word는 배열입니다. 따라서 word는 주소를 가리킵니다.

word[0]은 배열의 첫 번째 인덱스 0에 있는 값을 가리킵니다.

따라서 word[0]은 주소가 아니라 값입니다.

strcmp 함수는 값이 아니라 값이 있는 주소를 인수로 받습니다. 따라서 word[0]의 주소를 전달해야 합니다. 주소는 &를 앞에 붙입니다.

따라서 strcmp 함수에서는 &word[0]처럼 써야 합니다.

word[인덱스] -> 값에 접근한다

&word[인덱스] -> 해당 값의 주소에 접근한다

함수가 원하는 인수가 값인지, 주소인지에 따라 선택해서 사용하면 됩니다.


, Kim Hyunsoo님이 작성
 


#include <stdio.h>

#include <string.h>

#include <stdbool.h>


int main() {

    char word[30];

    int length;

    bool isPalindrome = true;

    

    scanf("%[^\n]s", word);

    

    length = strlen(word);

    

    int begin = 0;

    int end = length - 1;

    

    int ret1 = strcmp(&word[begin], " ");

    int ret2 = strcmp(&word[end], " ");

    

    while (begin < end) {

        

        if (ret1 == 0) {

            while (ret1 == 0) {

                begin++;

                ret1 = strcmp(&word[begin], " ");

            }

        }

        

        if (ret2 == 0) {

            while (ret2 == 0) {

                end--;

                ret2 = strcmp(&word[end], " ");

            }

        }

        

        if (word[begin] != word[end]) {

            isPalindrome = false;

            break;

        } else {

            begin++;

            end--;

        }

        

        ret1 = strcmp(&word[begin], " ");

        ret2 = strcmp(&word[end], " ");

        

    }

    

    

    

    printf("%d\n", isPalindrome);

    

    return 0;


코딩을 작성했는데 공백과 입력한 값의 공백을 비교하려고 해도 ret 값이 0이 나오질 않습니다. 중간에 뭐가 잘못된 건가요? 그리고 프로그램을 실행하려고 하면 자꾸 word 앞에 '&'를 넣으라고 하는데 이건 무슨 차이가 있는 건가요? 현재 mac os Xcode 에서 작성 중입니다.

, 도장_ 관리자님이 작성
 

코드가 잘못되어 있습니다.

다음 코드를 읽어보겠습니다.
if(pg[begin] == ' ')
{
     while (pg[begin] != ' ')
     {
         begin++;
     }
}

한글로 코드를 써 보면


pg[begin]이 공백이면
    pg[begin]이 공백이 아니면
        begin 위치를 1증가

이와 같은 로직이므로 while 문은 한 번도 실행되지 않습니다.


, 김 도훈님이 작성
 

if(pg[begin] == ' ')

{

while (pg[begin] != ' ')

{

begin++;

}

}

if (pg[end] == ' ')

{

while (pg[end] != ' ')

        {

end--;

}

}




공백문자가 여러개일 경우에 대비해 while문을 이용해 begin과 end가 가리키는 문자가 공백이 아닐때까지 당겨왔는데 실제에서는 당겨지지가 않습니다. 왜 그런지 궁금합니다