C++의 문자열에서 구두점 제거
-
std::erase
및std::remove_if
함수를 사용하여 C++의 문자열에서 구두점 제거 - 사용자 지정 함수를 사용하여 C++의 문자열에서 구두점 제거
- 반복 방법을 사용하여 C++의 문자열에서 구두점 제거
이 기사에서는 C++의 문자열에서 구두점을 제거하는 방법에 대한 몇 가지 방법을 설명합니다.
std::erase
및std::remove_if
함수를 사용하여 C++의 문자열에서 구두점 제거
std::remove_if
는 STL 알고리즘 라이브러리의 일부이며 주어진 조건이 참으로 평가되는 모든 요소를 제거 할 수 있습니다. 조건은 범위의 각 요소에 대해 bool
값을 반환해야합니다. 이 경우 ispunct
함수를 전달하여 구두점 기호를 확인합니다. std::remove_if
는 새로운 범위의 값에 대한 끝 반복기를 반환하므로 구문 분석된 문자열을 생성하는 erase
방법으로 호출을 연결한다. 이 솔루션은erase-remove
관용구와 유사하게 작동합니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string text =
"Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
"porttitor.";
cout << text << endl;
text.erase(std::remove_if(text.begin(), text.end(), ispunct), text.end());
cout << text << endl;
return EXIT_SUCCESS;
}
출력:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
사용자 지정 함수를 사용하여 C++의 문자열에서 구두점 제거
또는 이전 메서드를 별도의 함수로 이동하여 지정된 문자열의 로컬 복사본을 만들고 파싱 된 값을 호출자 코드로 반환하는 동안 작동 할 수 있습니다. 이 함수는 다른 문자 그룹을 지원하도록 기능을 확장하거나remove_if
알고리즘의 세 번째 매개 변수에 대한 사용자 정의 술어 함수를 전달하는 데 사용될 수 있습니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string removeSpaces(const string& s) {
string tmp(s);
tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
return tmp;
}
int main() {
string text =
"Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
"porttitor.";
cout << text << endl;
string parsed_text = removeSpaces(text);
cout << parsed_text << endl;
return EXIT_SUCCESS;
}
출력:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
반복 방법을 사용하여 C++의 문자열에서 구두점 제거
또 다른 대안은 문자열의 모든 문자를 반복하는 별도의 함수를 구현하는 것입니다. 이 함수는 참조로 문자열을 가져오고for
루프를 사용하여 문자열을 순회합니다. 각 반복에서ispunct
가 호출되어 문자가 구두점 기호인지 여부를 확인합니다. 원래 문자열 개체가erase
함수에 의해 수정되고 루프가 개수를 갱신해야하기 때문에len
변수에는 각 일치 조건에서 문자열의 크기가 할당됩니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
void removeSpaces2(string& s) {
for (int i = 0, len = s.size(); i < len; i++) {
if (ispunct(s[i])) {
s.erase(i--, 1);
len = s.size();
}
}
}
int main() {
string text =
"Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
"porttitor.";
cout << text << endl;
removeSpaces2(text);
cout << text << endl;
return EXIT_SUCCESS;
}
출력:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook