문자열 치환
string a="Java", b="C++";
a=b;
문자열 비교
string name="KItty";
string alias="Kito";
int res=name.compare(alias); //name과 alias를 비교한다.(name이 alias보다 앞에 오면 음수)
if(res==0) cout <<"두 문자열이 같다."; //name과 alias가 동일
else if(res<0) cout<<name<<" < "<<alias<<endl; //name이 앞에 옴
else cout<<alias<<"<"<<name<<endl; //name이 뒤에 옴
문자열 연결
string a("I");
a.append(" love "); //a="I love"
--------------------------------
string a("I love C++");
string b(".");
string c;
c = a + b ; // c="I love C++."
c +=b // c에다가 b를 붙여 c로 만듦 / c="I love C++.."
문자열 삽입
//insert() 사용 예
string a("I love C++");
a.insert(2,"really "); //a= "I really love C++"
//replace() 사용 예
string a("I love C++");
a.replace(2,11,"study"); // a="I study"
문자열 길이
문자열 길이는 문자열에 포함된 문자 개수를 말하며, length()와 size() 함수는 문자열의 길이를 리턴한다.
string 객체의 내부 메모리 용량을 리턴하는 capacity()도 있다. 용량은 자동 조절되므로 신경 쓸 필요 없다.
아래는 문자열 길이와 용량을 리턴하는 코드 예이다.
string a("I study C++");
int length=a.length();
int size=a.size();
int capacity=a.capacity(); //스트링 a의 현재 용량 capacity=31 변할 수 있다.
문자열 삭제
string a("I love C++");
a.erase(0,7); //a의 0부터 7개의 문자 삭제. a="C++"
a.clear(); // a=""
서브스트링
substr() 함수를 사용하면 문자열에서 일부분을 발췌한 문자열(서브스트링)을 얻을 수 있다. substr() 실행 후 b의 문자열은 변화가 없음에 유의하라.
string b="I love C++";
string c=b.substr(2,4); //b의 인덱스에서 2부터 4개의 문자 리턴. c="love"
string d=b.substr(2); //b의 인덱스에서 2부터 끝까지 문자 리턴. d="love C++"
문자열 검색
문자열 내에 특정 문자열이 존재하는지 검색하는 기능은 많은 응용에서 사용된다. find()는 문자열에서 특정 문자나 문자열을 발견하면 첫 번째 인덱스를 리턴한다. 발견하지 못하면 -1을 리턴한다.
string e= "I love love C++";
int index=e.find("love"); // e에서 "love" 검색, 인덱스 2 리턴
index=e.find("love",index+1); // love를 인덱스 3부터 검색, index=2이었고 find에서 6을 반환해서 7반환
index= e.find("C#"); // e에서 "C#"을 발견할 수 없음. -1 리턴
index=e.find('v',7); // e의 인덱스 7부터 'v'문자 검색. 인덱스 9 리턴
문자열의 각 문자 다루기
at() 함수와 [] 연산자는 둘 다 문자열의 특정 위치에 있는 문자를 리턴한다. at()과 달리 [] 연산자를 이용하면 특정 문자를 다른 문자로 수정 가능하다.
string f("I love C++");
char ch1=f.at(7); // ch1='C'
char ch2=f[7]; // ch2='C'
f[7]='D'; // f는 "I love D++"
-----------------------------
문자열 f의 마지막 문자는 아래와 같이 얻을 수 있다.
char ch3=f.at(f.length()-1); // ch3은 '+'
문자열의 숫자 변환, stoi()
문자열을 숫자로 변환하는 전역 함수 stoi()가 있다.
string year="2014";
int n=stoi(year); // n은 정수 2014 값을 가진다.
문자 다루기
string은 문자열만 다루지 문자를 다루는 기능은 없다. 문자를 다루는 함수는 <locale> 헤더 파일에 존재한다.
다음은 <locale> 헤더 파일에 있는 toupper(), isdigit(), isalpha() 함수를 사용하는 예이다.
string a="hello";
for(int i=0;i<a.length();i++) a[i]=toupper(a[i]); //a가 "HELLO"로 변경
cout << a;
if(isdigit(a[0])) cout << "숫자";
else if (isalpha(a.at(0))) cout << "문자"; // a[0]은 문자 'H'
toupper(int ch) : 대문자로 바꾸는 함수. tolower()를 하면 소문자로 바꾼다.
isdigit(int r) : 인자로 int 타입의 문자 1개를 전달받고, 숫자라면 0이 아닌 값을 리턴. 숫자가 아니라면 0을 리턴.
isalpha(int ch) : 알파벳 대문자 'A-Z'는 1 반환. 알파벳 소문자 'a-z'는 2 반환. 알파벳이 아닌것은 0을 반환.
아래 코드는 문자열을 입력 받고 회전시키는 코드이다. [
생능 출팔사 명품C++프로그래밍 p.199
]
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cout <<"문자열을 입력하세요. 빈칸 가능 (한글X)"<<endl;
getline(cin,s,'\n');
int len=s.length();
for(int i=0;i<len;i++){
string first=s.substr(0,1); //first에 s에서 문자 1개를 문자열로 분리한 것을 넣는다.
string sub=s.substr(1,len-1); //나머지 문자들을 문자열로 분리
s=sub+first;
cout << s << endl;
}
}
'Programming Language > C++' 카테고리의 다른 글
| 함수 호출 시 객체 전달 (0) | 2023.04.08 |
|---|---|
| 함수의 인자 전달 방식 (1) | 2023.04.07 |
| string 클래스 개요 (0) | 2023.04.07 |
| this의 기본 개념 (0) | 2023.04.07 |
| 객체 배열의 동적 생성 및 반환 (0) | 2023.04.06 |