C++의 역 문자열
많은 상황에서 C++ 프로그래밍에서 문자열을 뒤집어야 할 수도 있습니다. 반전된 문자열을 인쇄하는 것만 포함될 수 있습니다. 또는 경우에 따라 해당 주소에서 문자열을 영구적으로 반전해야 할 수도 있습니다.
이 자습서에서는 두 가지 작업을 수행하는 방법을 알아봅니다. 그것도 다른 미리 정의된 함수와 사용자 정의 함수를 사용합니다.
C++에서 문자열 반전
문자열 반전은 문자열에 대한 작업을 의미하며 문자열의 문자 순서가 반전됩니다. 예를 들어 'str'에 "JournalDev\라는 문자열이 포함되어 있다고 가정합니다.
반전 작업이 문자열 'str'에서 발생한 후 내용이 반전되어야 합니다. 따라서 이제 'str'에는 문자열 "veDlanruoJ\가 포함되어야 합니다.
이제 다양한 기술을 사용하여 C++ 문자열에서 이 역방향 작업을 수행하는 방법을 살펴보겠습니다.
C++에서 reverse() 함수 사용하기
C++의 내장 반전 함수 reverse()
는 문자열을 직접 반전시킵니다. 양방향 시작 및 끝 반복자가 모두 인수로 전달된다는 점을 고려하십시오.
이 함수는 알고리즘 헤더 파일에 정의되어 있습니다. 아래 주어진 코드는 reverse()
함수의 사용을 설명합니다.
#include <algorithm>
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "Journal Dev reverse example";
reverse(str.begin(), str.end());
cout<<"\n"<<str;
return 0;
}
산출:
strrev() 사용
strrev()
는 cstring.h 헤더 파일 내부에 정의된 C++의 미리 정의된 함수입니다. 모든 C-문자열(문자 배열)을 뒤집는 데 광범위하게 적용할 수 있습니다.
또한 문자열의 기본 주소만 인수로 요구하고 그에 따라 문자열을 뒤집습니다. C++에서 strrev()
함수를 사용하여 문자열을 반전시키는 방법을 살펴보겠습니다.
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str[] ="Journal Dev reverse example";
strrev(str);
cout<<"\n"<<str;
return 0;
}
산출:
위의 코드는 strrev()
함수의 작동을 잘 보여줍니다. 문자열 'str'의 경우 출력 자체에서 볼 수 있듯이 함수는 이를 성공적으로 되돌립니다.
역순으로 문자열 인쇄
경우에 따라 문자열을 변경할 필요가 없고 역순으로만 인쇄할 수 있습니다. 이는 수정할 수 없는 상수 문자열에 대한 것일 수 있습니다. 루프를 사용하여 모든 문자열을 반전된 패턴으로 인쇄할 수 있습니다. 방법을 살펴보겠습니다.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str="Journal Dev reverse example";
int i;
cout<<"Printing string in reverse\n";
for(i = str.length() - 1; i >= 0; i--)
{
cout<<str[i];
}
return 0;
}
산출:
- 위 코드에서 먼저 문자열 'str'을 초기화했습니다.
- for 루프 내에서 문자열을 인쇄하는 동안
str.length()-1
값으로 반복자 'i'를 초기화했습니다. 이는 문자열을 문자별로 인쇄하지만 마지막 인덱스부터 시작한다는 것을 의미합니다. - 참고:
length()
는 문자열의 길이를 반환합니다. 따라서 문자열을 역순으로 인쇄하려면 문자 배열에서 인덱싱이 '0'부터 시작하기 때문에length()-1
이어야 하는 마지막 인덱스를 고려해야 합니다.
우리만의 문자열 반전 함수 만들기 My_rev()
지금까지 우리는 미리 정의된 다른 함수를 사용하여 문자열을 거꾸로 인쇄하는 방법과 문자열을 뒤집는 방법을 배웠습니다. 이제 주어진 문자열을 뒤집기 위해 My_rev()
라는 함수를 생성하거나 정의해 보겠습니다.
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
char *My_rev(char *str)
{
int i,len=0,n;
char temp;
len=strlen(str);
n=len-1;
for(i = 0; i <=(len/2); i++)
{
temp=str[i];
str[i]=str[n];
str[n]=temp;
n--;
}
return str;
}
int main()
{
char My_string[]="Journal Dev reverse example";
cout<<"Reverse string using My_rev()...\n";
My_rev(My_string);
cout<<My_string;
return 0;
}
산출:
- 위의 코드에서
My_rev()
는 문자열의 기본 주소가 인수로 전달되는 경우 문자열을 뒤집는 함수입니다. - My_rev() 함수 내에서 *str은 제공된 문자열의 기본 주소를 저장하는 포인터입니다. 우리의 경우 str은 문자열 My_string의 첫 번째 요소를 가리킵니다.
- len은 문자열의 길이를 저장합니다. 반면 n은 마지막 요소의 인덱스입니다.
- 함수에서 양쪽 끝에서 문자열의 개별 문자를 교환하려고 합니다. 즉, (len/2) 위치에 도달할 때까지 0번째 인덱스와 n번째 인덱스의 요소를 계속 교체합니다. 위의 코드에서
for
루프는 기술적으로 문자열을 반전시키는 이 교환을 수행합니다. - 결국 기본 주소 str을
main()
함수로 반환합니다. 여기서 문자열은cout
함수를 사용하여 인쇄됩니다.
참조
- https://stackoverflow.com/questions/198199/how-do-you-reverse-a-string-in-place-in-c-or-c
- /community/tutorials/string-length-in-c-plus-plus