웹사이트 검색

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