inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

gets 관련 질문드립니다

344

김지연

작성한 질문수 1

0

7번 문제 (영어단어복구)에서 gets를 사용하였는데

gets를 사용하면 오류가 떠서 사용을 못하게 되어서 찾아보니

gets가 위험하여 fgets나 gets_s를 사용하라고 하던데

fgets를 사용하니 개행문자까지 들어가서 for(i=0; arr[i]!='\n'; i++) 이렇게 사용하여 풀었는데

혹시 공백이 포함된 문자열을 입력받을때 다른 좋은 방법이 있을까 질문드립니다!

 

그리고 대문자를 소문자 변환하여 다른 새 배열에 넣고 한번에 출력하셨는데

혹시 for문 안에서 해당될때마다 문자 하나씩 출력하는것과 성능 차이가 있을까요? 

 

감사합니다

c++ 코딩-테스트

답변 2

0

김태원

안녕하세요^^

  1. 저는 비쥬얼 스튜디오에서 코드 작성을 할 때 gets_s를 사용했던 것 같습니다.

  2. 성능차이는 별로 차이나지 않습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

gets 함수는 문자열을 입력받는 함수로, 보안 취약점이 있어 사용을 권장하지 않습니다. 대신 fgets나 gets_s 함수를 사용하시는 것이 좋습니다.

fgets 함수를 사용하면 개행문자까지 입력 받아들입니다. 따라서 개행문자를 처리하기 위해서 for문을 사용하셨을 것 같은데요, fgets 함수를 사용하더라도 개행문자가 포함되어서 입력됩니다. 따라서 개행문자를 제거하기 위해 따로 처리해주셔야 합니다. 예를 들어, 개행문자를 ‘\n’이라고 가정하고 아래와 같은 코드를 사용하실 수 있습니다.

fgets(arr, sizeof(arr), stdin);
arr[strlen(arr)-1] = '\0';

이렇게 하면 입력 받은 문자열의 맨 끝에 개행문자를 널 문자(‘\0’)로 변경하여 개행문자를 제거할 수 있습니다.

대문자를 소문자로 변환하는 방법에 따라 성능 차이가 있을 수 있습니다. for문 안에서 해당 문자를 바로 출력하는 방법과 한 번에 출력하는 방법 중 어느 것이 성능이 우수한지는 상황에 따라 다를 수 있습니다. 하지만 일반적으로는 for문 안에서 해단 문자를 하나씩 출력하는 것보다 한 번에 출력하는 방법이 더 효율적이라고 볼 수 있습니다. 이는 출력 작업에 대한 시스템 호출의 수를 줄여서 성능을 향상시킬 수 있기 때문입니다.

그러나 이러한 성능 차이는 매우 작을 수도 있으며, 최신 컴파일러에서는 최적화된 코드를 자동으로 생성하기 때문에 큰 차이가 나지 않을 수도 있습니다.

따라서 성능 차이에 대해서는 실제로 코드를 실행시켜본 후에 성능 측정을 해보는 것이 가장 정확한 방법입니다.

더 나은 방법이 있는지에 대해서는 다른 방법들도 존재하지만, fgets를 사용한 방법이 일반적으로 효율적입니다. 추가로 어떤 방법을 사용하시는지에 따라 더 효율적인 방법이 있는지도 달라질 수 있으므로, 상황에 맞게 선택하셔야 합니다.

이상입니다. 추가로 질문이 있으시면 답변드릴게요. 감사합니다.

87번 채점 프로그램에 오류가 있는 것 같습니다.

0

89

2

그리디 파트

0

115

2

안녕하세요. 선생님(54번 코드 관련 문의)

0

141

2

테스트 파일 exit_coe_1, time_limit_exceeded 질문

0

143

1

C언어로 코드를 짜면 채점 시에 한 문제 빼고 시간 초과가 발생하는데 해결하는 방법이 있을까요?

0

172

1

19번 질문있습니다

0

123

1

6번 관련 채점오류입니다

0

88

2

22번 문제는 C로 풀어주신 건가요 C++로 풀어주신 건가요?

0

166

2

dev C++ 콘솔창 바로 닫힘

0

245

1

최신화하기

0

171

1

채점이 안되요...

1

261

1

안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.

0

113

1

45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?

0

155

1

39번 두 배열 합치기 문제 채점 오류인가 코드 오류인가

0

155

0

채점기에서 틀렸다고 나오는데 이유를 모르겠습니다.

0

149

2

해당 강의에서 C언어로만 진행하는 강의 문의 건

0

145

2

87번 문제 섬나라 아일랜드 질문

0

128

1

16번 문제에서 직접 답을 대입하면 정답이 나오는데 채점에서 wrong answer가 나옵니다.

0

149

1

40번 교집합 문제

0

166

1

43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.

0

170

1

41. 연속된 자연수의 합 문제 질문있습니다.

0

166

1

질문있습니다.

0

193

2

시간초과가 나요

0

172

1

43번 문제 3 ~ 5번에 문제가 있는것 같습니다.

0

249

1