Last active
November 24, 2025 18:20
-
-
Save neudinger/273537b29036dcdfe57f4fffad5d5792 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <ranges> | |
| #include <print> | |
| #include <cctype> | |
| #include <string> | |
| #include <string_view> | |
| using namespace std::literals; | |
| using namespace std::string_view_literals; | |
| [[nodiscard("Strips whitespace from the beginning and end of a string")]] | |
| auto strip(std::string_view string) noexcept -> std::string_view { | |
| auto not_space = [](unsigned char _char) -> bool { | |
| return !std::isspace(_char); | |
| }; | |
| auto string_view = std::string_view{string}; | |
| auto const* first_non_space{std::ranges::find_if(string_view, not_space)}; | |
| string_view.remove_prefix(first_non_space - string_view.begin()); | |
| auto const* last_non_space{ | |
| std::ranges::find_if(string_view | std::views::reverse, not_space) | |
| .base()}; | |
| string_view.remove_suffix(string_view.end() - last_non_space); | |
| return string_view; | |
| } | |
| namespace filter { | |
| using Strip = struct Strip {}; | |
| [[nodiscard("Strips whitespace from the beginning and end of a string")]] | |
| auto operator|(std::string_view input, filter::Strip const& filter) noexcept | |
| -> std::string_view { | |
| return strip(input); | |
| }; | |
| inline constexpr Strip strip{}; | |
| } // namespace filter | |
| // g++ -std=c++23 trim.cpp -o trim && ./trim | |
| // https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGe1wAyeAyYAHI%2BAEaYxCAArADMpAAOqAqETgwe3r56KWmOAkEh4SxRMQm2mPYFDEIETMQEWT5%2BXJXVGXUNBEVhkdFxiQr1jc05bcPdvSVlgwCUtqhexMjsHObxwcjeWADUJvFuxIbAmAoH2CYaAIJXt2abDNteewduScTBBBd3vw9bO0w%2B0OyAcAE8kpgfjcNgCXkC3sNPkZofdHs9XockcFgAB9ABueEwAHdUXcvGkjLtmGwFEkmKtdsN0CAQLRCNExOd4lYbhScdTWGd6YzmazsUYCUTibj2QRObRubzbjDYlY1QwMHgFKJiOgIOYzHVPkkFLtiQgOXSGUCqMRUCxdgQEECosBggwBYZ0LtXLtUFRdkwmQRkcBDXMTLEACJR2M3JheIghk0QMUgCV4wkklM4ubU1CYVSrJIEXYAWguIZZGdDOKlOZMAHZlbsg0nUAWCLjrYyDtH9mq4xAvAw0sAQj7kAgGrtcdOGvnK/FsLsIqhPPsW3c223iJgCMsGLswGB09re5gIPOZ8RIzyd1vYw%2BYTc24nk5mG8TgQP01/s1JFtM2bZ9lUfD9OzQMcCAAKl2GhiGGXFNQYHsRShYCCBrY4jDOVkaAYdBcTwKg0zrSVANILt0JtSMmzAx8AOlAA6fcWFQfFMFxD5MBoVRqDwJDu1Q2jGXLXNKNYt1gggOZ73At922TaDhnggxkNEy9m1bXc23TXDTgUAjgmI0jyLDb8tzcatWUA4yQH3LikMwajNW7S9IyUvS9JYiImCUOTQIOXTmJJNjMA4riey8Kh%2BIs%2BtAJY1w5IrXYNJEgQxMwBTfiU/dD2IY8wtJF9bgYvLrhpYUbQQuh5WILdFOufkqWNPAkl/FMvAcXZ2s6nTgrK34hw1LUdQafVDX6s0LStDCEPtR1nVdTB3QYT0qW9X0iP9QNgxAswzEjGM4zuSD/UhY4iGIZs3HImsSt2YIkiTaiaFoBrWX63ZVO%2BMwADY6s%2B6J801IsS2%2BbyKyrf8KKzaUmsfAqj1zJIIBepNcphCrhpuYJ2RCX6BGGIsPj6utOuxJJBtx8CGLbAB6RnBVpBaPoayrmd2cNLGsCtmX7Uw%2BcsB4nU%2BFgWOQJJOvLTs60dcwAaV3YWMZhXzo7XYWCYWSlyrL4kaUuGw2JmDJPDbcjrbF1aFoTtiRIWgfX2I6hua/TsNZD4vloBgDSOhW2B9fExC8IEAxPdZtwYsAOGes049p6Mk6O6jM3TymEqMeSQqYr2QB9wQ/YDswg8wEOw4jwMk5jlP4%2B1KPk9TsxM7DNuBTu4GvtrE1sZVa49wPVHsAADQASQAFVxIQ5DcNxsCEIQ85x%2BNrg4BZaE4WJeD8DgtFIVBODcax%2BYUJYVgRB4eFIAhNA3hYAGtBhYyR4kkWINEkJsAE4HniI6TZ9CcEkLve%2Bh9OC8GMhoW%2B98FhwFgDARAKAHRJDoNEcglA0AsDQfQGIwAFDMFNAgVABA%2BD1WiMZCAERwERGCA0MEnAb50OYMQMEAB5CI2hMAOCYbwbBbBBDsIYLQRh%2B9eBYAiF4YAbgxCKj4aQLAOsjDiHEYooSPDHBcWMmoosPCkxrAPl8Ko4D2QRGOGwjwWBwEKwUc5dcShoyRROITUA4iFhUAMAQgAatKdhkI94334IIEQYh2BSBkIIRQKh1BqN0G0AwRgUCn0sPoPAERjKwGqiAKgLAyHORAKGUcj95KH1LBkHR5ZBbxGjMLKwot4i8E4tET4WBMlyXaJojILgiJjFaKQQIwQ%2BilAGG0PI6QBB9NyKkCZDBpj9BiBMKoXSBBdFGJ4Foeg7ArNqCMHoQyZijNsHsqZEw9nzJGYshY59lirAkJvbeYC1FH3jqoAAHADcsANJA81BLsCARSGAlP%2BbgQgJBXbxC4HMXgd93FPziDAreHBQGkBYAiliACNBcA0GYN%2BZgmxNjeZIH%2BpA94HxeVAkAMDYVaHgUgiASAlgEFemQigEAK5gtaXoYJwhRDiAiTy6JahwHxNIMSY4SQ%2BEPI4DvUl4CXnsKTCyvaux3mfO%2Bb85A/zAXAogB4HB6DGobChTCuBCwXRMCwDEDpSKUVouJSxAGv83k/ybLEJ1R0uCxDaGSppkDbBUtgXC0gz9JAAxYu62IxLYhmA0E2AGTqmyJCRY0uVzz/U0ofsAjgZgnnkozWa0gzk0jOEkEAA%3D | |
| auto main() -> int { | |
| std::string const string{" hello world "}; | |
| std::println("trimmed value of '{}' is '{}'", string, strip(string)); | |
| std::println("trimmed value of '{}' is '{}'", string, string | filter::strip); | |
| return EXIT_SUCCESS; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment