> 백엔드 개발 > C++ > 본문

C의 문자열에서 선행 및 후행 공백을 자르는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-19 09:28:03
원래의
343명이 탐색했습니다.

How to Trim Leading and Trailing Spaces from a String in C  ?

문자열에서 선행 및 후행 공백 제거

C에서 문자열 객체의 선행 및 후행 공백을 제거하는 것은 일반적인 작업입니다. 문자열 클래스에는 이를 수행하는 기본 메소드가 없지만 문자열 조작 기술의 조합을 통해 달성할 수 있습니다.

선행 및 후행 공백을 제거하려면 find_first_not_of 및 find_last_not_of 함수를 사용하여 첫 번째와 마지막을 식별할 수 있습니다. 문자열의 공백이 아닌 문자. 이러한 위치가 결정되면 substr 함수를 사용하여 앞뒤 공백 없이 부분 문자열을 추출할 수 있습니다.

#include <string>

std::string trim(const std::string& str) {
    const auto strBegin = str.find_first_not_of(" ");
    if (strBegin == std::string::npos) {
        return "";
    }
    const auto strEnd = str.find_last_not_of(" ");
    const auto strRange = strEnd - strBegin + 1;
    return str.substr(strBegin, strRange);
}
로그인 후 복사

추가 공백을 줄이기 위해 서식 확장

문자열에서 단어 사이의 추가 공백을 제거하려면 보다 포괄적인 접근 방식이 필요합니다. 이는 find_first_of, find_last_not_of 및 substr 함수를 반복적으로 사용하여 공백의 하위 범위를 자리 표시자 문자 또는 문자열로 바꾸면 달성할 수 있습니다.

std::string reduce(const std::string& str, const std::string& fill = " ") {
    auto result = trim(str);
    auto beginSpace = result.find_first_of(" ");
    while (beginSpace != std::string::npos) {
        const auto endSpace = result.find_first_not_of(" ", beginSpace);
        const auto range = endSpace - beginSpace;
        result.replace(beginSpace, range, fill);
        const auto newStart = beginSpace + fill.length();
        beginSpace = result.find_first_of(" ", newStart);
    }
    return result;
}
로그인 후 복사

사용 예

다음 코드 조각은 이러한 사용 방법을 보여줍니다. 함수:

const std::string foo = "    too much\t   \tspace\t\t\t  ";
const std::string bar = "one\ntwo";

std::cout << "[" << trim(foo) << "]" << std::endl;
std::cout << "[" << reduce(foo) << "]" << std::endl;
std::cout << "[" << reduce(foo, "-") << "]" << std::endl;

std::cout << "[" << trim(bar) << "]" << std::endl;
로그인 후 복사

이 코드는 다음과 같은 출력을 생성합니다.

[too much               space]  
[too much space]  
[too-much-space]  
[one  
two]  
로그인 후 복사

위 내용은 C의 문자열에서 선행 및 후행 공백을 자르는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿