[학습 노트] 제1 강: STL 의 string 유형의 사용 방법

9749 단어 StringSTL
효 석의 블 로그 메 일:[email protected]전재 출처 를 밝 혀 주 십시오. 원문 링크:http://blog.csdn.net/qiulanzhu/article/details/50450424
1. string 의 구조 함수 
1. 기본 구조 함수
string();
예: string str1;
 
2. 복사 구조 함수
string(const string &str);
예: string str2(sr1);
 
3. 파 라 메 트릭 함수
string(const char *s);
예: string str3("abcdef");
 
string(int n, char c);
문자열 str4(5, 'a');
 
----------------------------------------------------------------------------------------------------------------------
2. string 의 할당
 
string &operator=(const string &s);
예:
string str1 = "abc";
string str2 = str1;
 
string &assign(const char *s);
예: str. assign ("abcdef");
 
string &assign(const char *s, int n);
예: str. assign ("abcdef", 3);
 
string &assign(const string &s, int start, int n);
예: str. assign ("abcdefgh", 2, 2);
 
----------------------------------------------------------------------------------------------------------------------
3. string 류 의 문자 조작
 
1. 문자열 의 어떤 문 자 를 가 져 오고 연산 자 [] 를 사용 합 니 다.
const char &operator[](int n) const;
예:
string str = "abcdefg";
char ch1 = str[2];
 
2. 문자열 의 어떤 문 자 를 at 로 가 져 옵 니 다.
const char &at(int n) const;
char ch2 = str. at (2); / / 경 계 를 넘 으 면 이상 을 던 져 캡 처 할 수 있 습 니 다.
 
3. 문자열 의 한 문 자 를 수정 하고 연산 자 [] 를 사용 합 니 다.
char &operator[](int);
str [3] = 'z';
 
4. 문자열 의 어떤 문 자 를 수정 하려 면 at 를 사용 하 십시오.
char &at(int n);
예: str. at (4) = 'x';
 
 
----------------------------------------------------------------------------------------------------------------------
문자열 출력
 
예: cout < < str. c str ();
헤더 파일 \ # include < string > 이 포함 되 어 있 으 면 직접 출력 할 수 있 습 니 다: cout < < str < endl;
 
----------------------------------------------------------------------------------------------------------------------
5. string 을 char * 가 가리 키 는 메모리 공간 으로 복사 합 니 다.
 
int copy(char *s, int n, int pos=0);
char *s: 복사 할 대상 위치
int 카피 개수
int pos: 복사 의 시작 위치, 기본 값 0 을 입력 하지 않 습 니 다.
반환 값: 복사 개수
예:
string str = "abcdef";
char ch[100] = {0};
int count = str.copy(ch, 5);
 
----------------------------------------------------------------------------------------------------------------------
6. string 의 길이
 
int length() const; //문자열 길 이 를 되 돌려 줍 니 다. '\ 0' 은 포함 되 지 않 습 니 다.
int lenth = str.length();
 
int size() const; / / 같은 길이 ()
int strSize = str.size();
 
bool empty() const; / 현재 문자열 이 비어 있 는 지 판단 합 니 다.
bool flag = str.empty();
 
----------------------------------------------------------------------------------------------------------------------
문자열 비교
 
int compare(const string &s) const; / / 사전 순 으로 앞 선 것 보다 작 습 니 다. >: 1 을 되 돌려 줍 니 다. <: 1 을 되 돌려 줍 니 다. =: 0 을 되 돌려 줍 니 다.
예:
string str1 = "abc";
string str2 = "xyz";
str1.compare(str2);
 
int compare(const char *s) const; / / 사전 순 으로 앞 선 것 보다 작 습 니 다. >: 1 을 되 돌려 줍 니 다. <: 1 을 되 돌려 줍 니 다. =: 0 을 되 돌려 줍 니 다.
예:
strint str1 = "abc";
char *ch = "xyz";
str1.compare(ch);
 
----------------------------------------------------------------------------------------------------------------------
8. string 의 하위 문자열
 
string substr(ing pos = 0, int n = npos) const;
예:
string str = "abc";
str.substr(0, 2);
 
----------------------------------------------------------------------------------------------------------------------
9. 문자열 연결 --- 증가
 
string &operator+=(const string &s);
예:
string str1 = "hello";
string str2 = " world";
string str1 += str2;
 
string &operator+=(const char *s);
예:
string str1 = "hello";
char *ch = " world";
str1 += ch;
 
string &append(const char *s);
예: str. append ("xyz");
 
string &append(const char *s, int n);
예: str. append ("xyz", 3);
 
string &append(const string &s, int pos, int n);
예: str. append ("xyz", 1, 2);
----------------------------------------------------------------------------------------------------------------------
10. string 의 삽입 --- 증가
string &insert(int pos, const char *s);
예:
string str = "abcdef";
str.insert(1, "xxx");
 
string &insert(int pos, const string &s);
예:
string str1 = "abcdef";
string str2 = "xxx";
str1.insert(1, str2);
 
string &insert(int pos, int n, char c);
예:
string str("abcdef");
str.insert(1, 3, 'x');
 
----------------------------------------------------------------------------------------------------------------------
11. string 의 삭제 - 삭제
 
string &erase(int pos = 0, int n);
int pos: 삭제 할 시작 위치
int 삭제 할 개수
예:
string str("abcdef");
str.erase(2, 3);
 
 
----------------------------------------------------------------------------------------------------------------------
12. string 의 교체
 
string &replace(int pos, int n, const string s)
예:
string str = "abcdef";
str.replace(2, 2, "-----");
 
----------------------------------------------------------------------------------------------------------------------
13. string 의 교환 --- 변경
 
1. void swap(string &str1, string &str2);
예:
string str1 = "hello";
string str2 = "world";
swap(str1, str2);
 
2.str1.swap(sr2)
예:
string str1 = "hello";
string str2 = "world";
str1.swap(sr2);
 
----------------------------------------------------------------------------------------------------------------------
14. string 의 찾기 --- 조사
 
1. 정방 향 찾기
int find(char c, int pos = 0) const; / / 문자 찾기
예: str. find ('c');
 
int find(const char *s, int pos = 0) const; / 문자열 찾기
예:
string str("abcdef");
char *ch = "ef";
str.find(ch, 0);
 
int find(const sring &s, int pos = 0) const; / / 되 돌 릴 수 없 음 - 1
예:
string str1("abcdef");
string str2("de");
str1.find(str2, 0);
 
2. 역방향 찾기
int rfind(char c, int pos = npos) const;
예:
string str("abcdefg");
str.rfind('g', str.length()-1);
 
int rfind(const char *s, int pos = npos) const;
예:
string str("abcdef");
str.rfind("ef", str.length() - 1);
 
int rfind(const string &s, int pos = npos) const;
예:
string str("abcdef");
str.rfind("ef", str.length() - 1);
 
----------------------------------------------------------------------------------------------------------------------
15. string 과 wtring 의 전환
1. 윈도 API 함수 호출:
WideCharToMultiByte();
MultiByteToWideChar();
예:
//utf-8 unicode
wchar_t *Utf_8ToUnicode(char* szU8) 
{
	//UTF8 to Unicode
	//              ,        ,   16    

	//   ,         
	int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);
	
	//      '\0'    ,MultiByteToWideChar   '\0'  
	wchar_t* wszString = new wchar_t[wcsLen + 1];
	
	//  
	::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);
	
	//    '\0'
	wszString[wcsLen] = '\0';
	return wszString;
}
//unicode utf-8
char* UnicodeToUTF_8First(CString str)
{   
	int u8Len =WideCharToMultiByte(CP_UTF8, NULL,CStringW(str),str.GetLength(), NULL, 0, NULL, NULL);
	char* szU8 = new  char[u8Len + 1];
	WideCharToMultiByte(CP_UTF8, NULL, CStringW(str), str.GetLength(), szU8, u8Len, NULL, NULL);
	szU8[u8Len] = '\0';
	return szU8;  
}

2. ATL 의 CA2W 클래스 와 CW2A 클래스 를 사용 하거나 매크로 A2W 와 W2A 를 사용 합 니 다.
 
3. 크로스 플랫폼 방법: CRT 라 이브 러 리 의 mbstowcs () 함수 와 wcstombs () 함 수 를 사용 하여 locale 을 설정 해 야 합 니 다.
예:
#include "stdafx.h"
#include <locale>
#include <iostream>
using namespace std;

string ws2s(const wstring &ws)
{
	string curLocale = setlocale(LC_ALL,NULL); //curLocale="C"
	setlocale(LC_ALL, "chs");
	const wchar_t *_Source = ws.c_str();
	size_t _Dsize = 2*ws.size()+1;
	
	char * _Dest = new char[_Dsize];
	memset(_Dest, 0, _Dsize);
	wcstombs(_Dest, _Source, _Dsize);
	
	string result = _Dest;
	
	delete[] _Dest;
	
	setlocale(LC_ALL, curLocale.c_str());
	return result;
}

wstring s2ws(const string &s)
{
	string curLocale = setlocale(LC_ALL, NULL);
	setlocale(LC_ALL, "chs");
	
	const char *_Source = s.c_str();
	size_t _Dsize = s.size() + 1;
	wchar_t *_Dest = new wchar_t[_Dsize];
	wmemset(_Dest, 0, _Dsize);
	mbstowcs(_Dest, _Source, _Dsize);
	wstring result = _Dest;
	
	delete [] _Dest;
	setlocale(LC_ALL, curLocale.c_str());
	
	return	result;
}

int main(int argc, char* argv[])
{
    wstring str1=L"abcdef"; 
	string str2 = ws2s(str1);
	wstring str3 = s2ws(str2);

	wcout<<str1.c_str()<<endl;
	cout<<str2.c_str()<<endl;
	wcout<<str3.c_str()<<endl;

	return 0;
}

좋은 웹페이지 즐겨찾기