문자열을 입력받아 역순으로 출력하는 프로그램을 작성하여라.
출력
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
를 사용한다.