[C++] 4주차 과제 리뷰

yeohn·2022년 10월 28일
0

2022-2 C++ 과제 리뷰

목록 보기
4/10

문제

문자열을 입력받아 역순으로 출력하는 프로그램을 작성하여라.

출력
Enter a string: ABCD
The reversed string is DCBA

(문제 출처 - C++로 시작하는 객체지향 프로그래밍 5.50)


작성한 코드

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string S;
	int i;

	cout << "Enter a string: ";
	cin >> S;

	cout << "The reversed string is ";

	for (i = S.length(); i >= 0; i--) // 문자열의 길이를 초기값으로 설정, 
    								  // i는 0까지 감소하도록 조건식 작성
	{
		cout << S[i]; // S문자열의 큰 값부터 
	}
	
	return 0;
}

처음에는 슬라이싱 해서 넣는 줄 알고 for문 두개 작성 (백준 11720 참고)
그러나 순서만 역순으로 출력하면 되기 때문에 i가 감소하는 반복문 하나만 사용하면 된다.

다른 코드 (교수님 제공 모범답안)

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string S;
    cout << "Enter a string: ";
    cin >> S;
    
    for (int i = 0, j = S.size() - 1; i < S.size() / 2; i++, j--) 
    {                         // -1 주의
    	char temp = S[i];
        S[i] = S[j];
        S[j] = temp;
	}
    
	cout << "The reversed string is " << S << endl;
    
    return 0;
}

코드에 대한 교수님 코멘트

length()로 string의 자리를 가리키면 NUL(='\0)의 값을 가리킴으로 마지막 자리를 "length()-1" 사용 권장

length()로 string 자리를 가리키면 NULL 값이 된다.
for (i = S.length(); i >= 0; i--) 에서 S.length()는 NULL 값이 되므로 i = S.length()-1 를 사용한다.

0개의 댓글