중화사전망 - 중국어 사전 - 헤더 파일에서 C++ 문자열 사용
헤더 파일에서 C++ 문자열 사용
문자열 변수를 선언하는 것은 간단합니다.
문자열 Str
이런 식으로 문자열 변수를 선언했지만 클래스이기 때문에 생성자와 소멸자가 있습니다. 위 문에는 인수가 전달되지 않으므로 string 의 기본 생성자를 직접 사용합니다. 이 함수의 역할은 str 을 빈 문자열로 초기화하는 것입니다. String 클래스의 생성자 및 소멸자는 다음과 같습니다.
A) 문자열 s; //빈 문자열 생성 s
B)Strings(STR)//Copy 생성자는 str 의 복사본을 생성합니다.
C)Strings(str, Stridx)// 문자열 str 에서 "stridx 로 시작" 한 부분을 문자열의 초기 값으로 가져옵니다.
D)Strings(STR, STRDX, STRLEN)// 문자열 str 에서 "STRDX 로 시작, 길이가 strlen 까지" 인 부분을 문자열의 초기 값으로 사용합니다.
E) string s(cstr) // c 문자열을 s 의 초기 값으로 사용합니다.
F) string s(chars, chars_len) // c 문자열의 처음 몇 개 chars_len 문자를 문자열 s 의 초기 값으로 가져옵니다.
G) strings s (num, c)// num c 자를 포함하는 문자열을 생성합니다.
H) 문자열 s (beg, end)// 구획은 beg 입니다. End 의 문자 (end 제외) 는 문자열 s 의 초기 값으로 사용됩니다.
I) s.~string() // 모든 문자를 삭제하고 메모리를 해제합니다.
모두 간단해서 설명하지 않겠습니다.
2. 문자열 조작 기능
다음은 C++ 문자열의 초점입니다. 먼저 다양한 조작 함수를 나열하겠습니다. 모든 기능을 보는 것을 좋아하지 않는 사람은 여기에서 자신이 좋아하는 기능을 찾을 수 있고, 나중에 그의 상세한 설명을 볼 수 있다.
A) =, 새 값으로 값 지정 ()//.
B) swap() // 두 문자열의 내용을 교환합니다.
C) +=, append (), push_back() // 끝에 문자를 추가합니다.
D) insert() // 문자 삽입
E) erase() // 문자 삭제
F) clear() // 모든 문자를 삭제합니다.
G) replace() // 대체 문자
H)+// 문자열 연결
나) = =,! =,<,<=,>,>=, compare() // 비교 문자열
J) size (), length() // 는 문자 수를 반환합니다.
K) max_size() // 가능한 최대 문자 수를 반환합니다.
L) empty() // 문자열이 비어 있는지 확인합니다.
M) capacity() // 재할당하기 전의 문자 용량을 반환합니다.
N) reserve() // 특정 수의 문자를 수용할 수 있도록 특정 양의 메모리를 예약합니다.
O) [], at() // 단일 문자 액세스
P)>& gt, getline() // 흐름에서 값을 읽습니다.
Q) < & lt// 조회 값을 스트림에 씁니다.
R) copy() // C_string 에 값을 할당합니다.
S) c_str() // C_string 형식으로 내용을 반환합니다.
T) data() // 문자 배열로 내용을 반환합니다.
U) substr() // 하위 문자열을 반환합니다.
V) 검색 기능
W)begin() end() // STL 과 같은 반복자 지원을 제공합니다.
X) rbegin() rend() // 역방향 반복자
Y) get_allocator() // configurator 로 돌아갑니다.
아래에 자세히 설명되어 있습니다.
2.1c++문자열 및 c 문자열 변환
C
++C++ 문자열에서 해당 C_string 을 가져오는 방법은 data (), c_str () 및 copy () 를 사용하는 것입니다. 여기서 data () 는' \0' 없이 문자열 내용을 문자 배열로 반환합니다. C_str () 은' \ 0' 으로 끝나는 문자 배열을 반환하고 copy () 는 문자열 내용을 기존 c_string 또는
문자 배열에서. C++ 문자열은 "\0" 으로 끝나지 않습니다. 내 제안은 c_string 이 부득이하지 않는 한 프로그램에서 C++ 문자열을 사용하는 것이다. 간단한 소개와 상세 소개일 뿐이므로 사용주의사항을 더 알고 싶은 분은 댓글 (내 받은 편지함으로) 을 남겨 주세요. 자세히 설명하겠습니다.
2.2 크기 및 용량 기능
C++ 문자열에는 a) 기존 문자 수, size () 및 length () 함수 등 세 가지 크기가 있습니다. Empty () 는 문자열이 비어 있는지 확인하는 데 사용됩니다. B) 최대 크기 ()
이 크기는 현재 C++ 문자열에 포함될 수 있는 최대 문자 수를 나타내며, 대략 기계 자체의 제한이나 문자열이 있는 연속 메모리 크기와 관련이 있습니다. 우리는 평소에 그를 신경쓰지 않아도 된다, 우리에게는 충분히 커야 한다. 그러나 충분하지 않으면 length_error 예외가 발생합니다. C) c)capacity () 가 메모리를 재할당하기 전에.
문자열에 포함될 수 있는 최대 문자 수입니다. 여기서 지적해야 할 또 다른 점은 reserve () 함수로, string 에 메모리를 재할당합니다. 재분배 크기는 해당 매개변수에 의해 결정됩니다.
기본 매개변수는 0 입니다. 이때 현이 저절로 줄어든다.
C++ 문자열과 C 문자열 변환 문제도 반복해야 합니다.
문제는 많은 사람들이 자신의 프로그램이 다른 사람의 함수 및 클래스 (예: 데이터베이스 연결 함수 Connect(char*, char*)) 를 호출하지만 다른 사람의 함수를 참조하는 문제를 겪게 됩니다.
숫자 형식은 char* 이며 c_str () 및 data () 가 반환하는 문자 배열이 문자열 소유라는 것을 알고 있으므로 const 입니다.
Char*, 위 함수의 인수를 하려면 char* 에도 복사해야 합니다. 우리의 원칙은 C 문자열을 사용하지 않는 것입니다. 그래서, 이 시점에서 우리가해야 할 일은 다음과 같습니다.
이 함수가 매개 변수 (즉, char*) 의 내용을 수정하지 않으면 (char*)UserID.c_str () 을 이렇게 연결할 수 있습니다.
(char*)PassWD.c_str ()) 그러나 변환된 문자열은 실제로 수정할 수 있기 때문에 (원하는 경우 직접 시도해 볼 수 있음) 이 시점에서 위험합니다. 따라서 함수를 호출할 때 매개 변수가 수정되지 않은 경우가 아니면 char* 로 복사해야 한다고 강조했습니다 물론, 어쨌든 char* 에 복제하는 것은 비교적 안전하다. 동시에, 우리는 기도한다.
기도는 여전히 C 문자열로 프로그래밍하고 있는 전문가들입니다. (전문가라고 해도 과언이 아닙니다. 우리가 아직 개구멍바지를 입고 있을 때 프로그래밍을 시작했을지도 모릅니다. 하하 ...) 더 표준화된 함수를 썼기 때문에.
우리는 출연진이 필요하지 않다.
2.3 요소 액세스
아래 첨자 연산자 [] 와 함수 at () 를 사용하여 요소에 포함된 문자에 액세스할 수 있습니다. 그러나 연산자 [] 는 인덱스가 유효한지 확인하지 않습니다 (유효한 인덱스 0~str.length ()). 색인이 유효하지 않으면 정의되지 않은 동작이 발생합니다. 그리고 at () 는 사용할 경우 검사를 합니다.
() 에서 인덱스가 잘못되어 out_of_range 예외가 발생합니다.
한 가지 예외는 상수 문자열입니다.
A; 연산자 [] 는 a.length () 의 인덱스 값에 대해 여전히 유효하며 반환 값은 "\0" 입니다. 다른 경우에는 a.length () 인덱스가 유효하지 않습니다. 예를 들면 다음과 같습니다.
Conststringcstr ("conststring");
String Str ("문자열");
Str [3]; //좋습니다
Str.at (3); //좋습니다
Str [100]; //정의되지 않은 동작
Str.at (100); //throw _ 초과 _ 범위
Str[Str.length()] // 정의된 동작이 없습니다.
Cstr[Cstr.length()] // 반환' \ 0' 입니다
Str.at (str.length ()); //throw _ 초과 _ 범위
CSTR. at(CSTR. length())//// throw _ out _ 가 _ 범위를 벗어남
다음 참조 또는 포인터 할당에 동의하지 않습니다.
Char & ampr = s [2];
Char * p =&s [3];
재분배가 발생하면 R 과 P 가 즉시 무효가 되기 때문이다. 그것을 피하는 방법은 그것을 사용하지 않는 것이다.
2.4 비교 기능
C ++ 문자열은 일반적인 비교 연산자 (>; ,>=,<, & lt=,==,! =), string 과 C-string 의 비교도 지원합니다 (예
Str< "안녕하세요"). 사용 중 >, > =,<,<= 이러한 연산자를 사용할 때 문자는 "현재 문자 특성" 별로 정렬됩니다.
비교해 보세요. 사전의 맨 위에 있는 글자는 매우 작고, 비교 순서는 앞에서 뒤로 한다. 동일하지 않은 문자가 발견되면 해당 위치의 두 문자를 비교한 결과를 기준으로 두 문자열의 크기를 결정합니다. 한편, 문자열은
("AAAA")
또 다른 강력한 비교 함수는 멤버 함수인 compare () 입니다. 다중 매개변수 처리와 인덱스 값 및 길이 위치 하위 문자열의 비교를 지원합니다. 그는 비교 결과를 나타내는 정수를 반환합니다. 반환 값의 의미는 0- 같음입니다.
> 0- 보다 큼
문자열 s ("ABCD");
S.compare ("ABCD"); //0 을 반환합니다
미국 비교 ("dcba"); //0 보다 작은 값을 반환합니다.
S.compare ("ab"); //0 보다 큰 값을 반환합니다
비교; //같음
S.compare(0, 2, s, 2, 2); //ab 와 CD 간의 비교는 0 보다 작습니다.
S.compare( 1, 2, "bcx", 2); //"BC" 와 "BC" 를 비교합니다.
요즘 어떠세요? 모든 기능을 갖추고 있습니다! 뭐? 너의 입맛을 만족시킬 수 없니? 좋아, 그럼 기다려, 뒤에 좀 더 개인화된 대비 알고리즘이 있어. 먼저 힌트를 드리겠습니다. STL 로 알고리즘을 비교하세요. 뭐? STL 에 대해 아무것도 몰라? 젠장, 재건해!
2.5 내용 변경
이것은 문자열 작업의 상당 부분을 차지합니다.
먼저 숙제를 말하다. 첫 번째 할당 방법은 물론 연산자 = 를 사용하는 것이며 새 값은 문자열 (예: s=ns) 이 될 수 있습니다.
, c_string (예: s="gaint ") 또는 단일 문자 (예: s='j') 도 있습니다. 멤버 함수인 assign () 을 사용할 수도 있습니다. 이렇게 하면 문자열에 값을 지정할 수 있는 유연성이 향상됩니다. 예를 하나 들어보죠.
S. 할당 (str); //말하지 마
S.assign(str, 1, 3); //str 이 "iamangel" 이면 문자열에 "ama" 를 할당하는 것입니다.
S.assign(str, 2, string:: NPOs); //인덱스 값 2 부터 끝까지 문자열 str 을 s 에 할당합니다.
미국 할당 ("gaint"); //말하지 마
S.assign ("니코", 5); //'n'' i'' c'' o'' \ 0' 을 문자열에 할당합니다.
S.assign(5,' x'); //문자열에 5 개의 x 를 할당합니다.
문자열을 비우는 방법에는 s = s.clear () 의 세 가지가 있습니다. S.erase (); 나는 예를 말하는 것보다 다른 사람이 이해할 수 있게 하는 것이 더 쉽다고 점점 더 느끼고 있다! ) 을 참조하십시오.
String 은 문자 삽입, 삭제, 바꾸기 및 추가 기능을 제공합니다.
먼저 문자를 추가합니다 (여기서 추가는 끝에 있음). 이들 함수는+=, append () 및 push_back () 입니다. 예를 들면 다음과 같습니다.
S+= str; //문자열을 추가합니다
S+= "제 이름은 Jia yp" 입니다. //c 문자열 추가
S+=' a'; //한 문자 추가
S.append (문자열);
S.append(str, 1, 3); //앞의 함수 매개 변수 할당과 동일한 해석을 해석하지 않습니다.
S.append(str, 2, string::npos)// 해석 없음.
S.append ("제 이름은 Jia yp");
S.append ("니코", 5);
S.append(5,' x');
S.push _ back ('a'); //이 함수는 STL 에 대한 단일 문자의 친숙함을 증가시킬 수 있으며 매우 간단하고 이해하기 쉽습니다.
문자열 중간 어딘가에 문자열을 삽입해야 할 수도 있습니다. 이 경우 삽입된 문자열이 배치될 삽입 위치의 인덱스를 지정해야 하는 insert () 함수를 사용할 수 있습니다.
S.insert(0, "내 이름");
S.insert( 1, str);
이러한 형태의 insert () 함수는 단일 문자의 전달을 지원하지 않으므로 단일 문자를 문자열로 작성해야 합니다 (역겹다). 징그럽다고 느껴진 이상, 다음 단락을 계속 볼 수밖에 없다. 삽입하기 위해서다.
Insert () 함수는 단일 문자를 삽입하는 두 개의 오버로드 함수 insert (size _ type index, size _ type num, chart 를 제공합니다.
C) 및 insert (반복자 위치, 크기 유형 번호, 차트.
C) 테스트를 수행합니다. 여기서 size_type 은 부호 없는 정수이고 iterator 는 char* 이므로 insert(0 함수 (0, 1) 를 호출할 수 없습니다.
J'); 이 시점에서 첫 번째 매개변수는 어떤 매개변수로 변환됩니까? 그래서 당신은 써야 합니다: insert (string:: size _ type) 0, 1,' j')! 두 번째 형식은
반복자가 문자를 삽입하는 형식이 있습니다. 나중에 언급됩니다. 참, string 은 STL 반복기를 사용하는 작업이 많은데, 그는 가능한 STL 에 가깝다.
Erase () 함수를 삭제하는 데는 여러 가지 형식이 있습니다 (정말 싫어요! ), 몇 가지 대체 함수 replace () 가 있습니다. 예를 들면 다음과 같습니다.
String s = "il8n
S.replace( 1, 2, "인터내셔널리제이션"); //인덱스 1 으로 시작하는 두 개를 다음 C_string 으로 바꿉니다.
S. erase (13); //인덱스 13 에서 모두 삭제합니다.
S. erase (7,5); //인덱스 7 에서 5 를 제거합니다.
2.6 하위 문자열 및 문자열 연결 추출
Substring 의 함수는 다음과 같이 substr () 입니다.
S.substr (); //반환된 전체 내용.
S. substr (11); //인덱스 1 1 뒤의 하위 문자열
S.substr(5, 6); //인덱스 5 로 시작하는 6 자.
두 문자열을 결합하는 함수는+입니다. (이해가 안 돼요 120 으로 전화해 주세요)
2.7 가져오기 및 내보내기 작업
1.& gt& gt 입력 스트림에서 문자열을 읽습니다.
2.& lt& lt 출력 스트림에 문자열을 씁니다.
또 다른 함수인 getline () 은 입력 스트림에서 줄 바꿈이 발생하거나 파일 끝에 도달할 때까지 한 줄을 읽습니다.
2.8 검색 및 찾기
다음을 포함한 많은 강력한 검색 기능이 있습니다.
찾기 ()
Rfind ()
Find_first_of ()
Find_last_of ()
Find_first_not_of ()
Find_last_not_of ()
이러한 함수는 문자 범위에서 검색 조건을 충족하는 첫 번째 문자의 인덱스를 반환하거나 대상을 찾을 수 없는 경우 NPOs 를 반환합니다. 모든 기능에 대한 매개변수는 다음과 같습니다.
첫 번째 매개 변수는 검색할 객체입니다. 두 번째 매개 변수 (선택 사항) 는 문자열에서 검색 시작점의 인덱스를 나타내고 세 번째 매개 변수 (선택 사항) 는 검색할 문자 수를 나타냅니다. 비교적 간단하다. 잘 모르는 것은 나에게 물어볼 수 있다. 나는 진지하게 대답할 것이다. 물론 뒤에 더 강력한 STL 검색도 언급됩니다.
마지막으로 NPO 의 의미를 말씀드리겠습니다. String::npos 의 유형은 string::size_type 입니다. 따라서 척도를 NPO 와 비교해야 하는 경우 척도 값은 string::size) 유형이어야 합니다. 경우에 따라 함수를 NPO 와 직접 비교할 수 있습니다 (예: if (s.find ("jia") = = string:).
- 관련 기사
- 졸린 인용문은 무엇입니까?
- 공부는 쉬워야 한다. 나는 이미 너를 위해 HP 의 이 학습 컴퓨터를 경험한 적이 있다.
- 내 세계 옷장에서 비밀 기지를 만드는 법
- 도덕적(Moral)과 윤리적(Ethic)은 모두 영어로 도덕성을 의미합니다. 두 단어의 차이점은 무엇인가요?
- GTA5 온라인 모드에서 임무를 할 때 외국인은 항상 나와 협력과 임무 분배 문제를 교환한다. 그러나 나는 이해할 수 없다. 나는 핸드폰으로 전화를 걸었다.
- '단계별 프랑스어 어휘'와 '단계별 프랑스어 어휘' 중 어느 것이 더 좋나요?
- 표준어 사전의 시작과 끝은 무엇입니까?
- 제멋대로 하는 것은 무슨 뜻입니까?
- 소변_이라는 단어는 무엇인가요?
- 강양과 전종서 단편 소설