> 백엔드 개발 > C++ > C 문자열에서 선행, 후행 및 추가 공백을 효율적으로 제거하는 방법은 무엇입니까?

C 문자열에서 선행, 후행 및 추가 공백을 효율적으로 제거하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-11 17:07:03
원래의
460명이 탐색했습니다.

How to Efficiently Remove Leading, Trailing, and Extra Spaces from a C   String?

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

문제:

방법 C 문자열에서 선행 및 후행 공백을 효율적으로 제거합니까? 또한 이 작업을 확장하여 문자열의 단어 사이에 있는 추가 공백을 제거하려면 어떻게 해야 합니까?

해결책:

선행 및 후행 공백 제거:

  • find_first_not_of(char): 이 함수를 사용하면 문자열에서 공백 문자가 아닌 첫 번째 문자를 찾을 수 있습니다.
  • find_last_not_of(char ): 문자열에서 공백 문자가 아닌 마지막 문자를 찾으려면 이 함수를 사용하세요.
  • substr(start, length): 이 함수를 사용하면 공백 문자가 아닌 부분 문자열을 추출할 수 있습니다. 시작 인덱스 및 지정된 길이.
std::string trim(const std::string& str, const std::string& whitespace = " \t") {
    const auto strBegin = str.find_first_not_of(whitespace);
    if (strBegin == std::string::npos)
        return ""; // No content

    const auto strEnd = str.find_last_not_of(whitespace);
    const auto strRange = strEnd - strBegin + 1;

    return str.substr(strBegin, strRange);
}
로그인 후 복사

추가 공백 줄이기:

  • find_first_of(char): 이 함수를 사용하면 문자열에서 첫 번째 공백 문자를 찾을 수 있습니다.
  • find_first_not_of(char): 이 함수를 사용하면 공백 문자 다음에 공백이 아닌 첫 번째 문자를 찾을 수 있습니다.
  • replace(start, length, new_str): 지정된 문자 범위를 새 문자열로 바꾸려면 이 함수를 사용합니다.
std::string reduce(const std::string& str, const std::string& fill = " ", const std::string& whitespace = " \t") {
    // Trim first
    auto result = trim(str, whitespace);

    // Replace sub ranges
    auto beginSpace = result.find_first_of(whitespace);
    while (beginSpace != std::string::npos) {
        const auto endSpace = result.find_first_not_of(whitespace, beginSpace);
        const auto range = endSpace - beginSpace;

        result.replace(beginSpace, range, fill);

        const auto newStart = beginSpace + fill.length();
        beginSpace = result.find_first_of(whitespace, newStart);
    }

    return result;
}
로그인 후 복사

예:

const std::string foo = "    too much\t   \tspace\t\t\t  ";
const std::string trimmedFoo = trim(foo);
const std::string reducedFoo = reduce(foo);

std::cout << "Original: " << foo << std::endl;
std::cout << "Trimmed: " << trimmedFoo << std::endl;
std::cout << "Reduced: " << reducedFoo << std::endl;
로그인 후 복사

출력:

Original:     too much        space              
Trimmed: too much space
Reduced: too-much-space
로그인 후 복사

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

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