c++_文件解析_读取_每行用字符分割_去除两头空格

需求:

c++ 读取一个文件, 逐行读取, 每行使用 冒号分割,然后使用空格分割 找到一行中的每一个元素, 不包含前后两头的空格作为返回元素

实现:

在C++中,可以使用标准库提供的文件I/O和字符串处理功能来实现逐行读取文件、使用冒号和空格分割每行并去除前后空格的功能。以下是一个示例程序,它演示了如何实现这一功能:

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <algorithm>

// 去除字符串前后的空格
std::string trim(const std::string &str) {
    size_t first = str.find_first_not_of(' ');
    if (first == std::string::npos)
        return "";
    size_t last = str.find_last_not_of(' ');
    return str.substr(first, last - first + 1);
}

// 分割字符串
std::vector<std::string> split(const std::string &str, char delimiter) {
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream(str);
    while (std::getline(tokenStream, token, delimiter)) {
        tokens.push_back(trim(token));
    }
    return tokens;
}

int main() {
    std::ifstream file("example.txt");
    std::string line;
    
    if (!file.is_open()) {
        std::cerr << "Unable to open file" << std::endl;
        return 1;
    }
    
    while (std::getline(file, line)) {
        // 使用冒号分割每行
        std::vector<std::string> colonSplit = split(line, ':');
        for (const auto &part : colonSplit) {
            // 使用空格分割每个部分
            std::vector<std::string> spaceSplit = split(part, ' ');
            for (const auto &element : spaceSplit) {
                if (!element.empty()) {
                    std::cout << element << std::endl; // 打印每个元素
                }
            }
        }
    }

    file.close();
    return 0;
}

代码解释

  1. trim 函数:

    • 该函数去除字符串前后的空格。find_first_not_offind_last_not_of用于找到第一个和最后一个非空格字符的位置,然后使用substr函数提取去除前后空格的子字符串。
  2. split 函数:

    • 该函数按照指定的分隔符分割字符串,并去除每个子字符串前后的空格。使用std::getlineistringstream中逐个提取被分隔的子字符串,并将去除空格后的结果存储在一个std::vector<std::string>中返回。
  3. main 函数:

    • 打开文件并逐行读取。
    • 每行首先按照冒号分割,得到的每个部分再按照空格分割。
    • 去除每个部分的前后空格后,输出每个非空的元素。

文件读取与处理

该程序会逐行读取名为example.txt的文件,并按行处理。每行会首先按冒号分割,然后再按空格分割,并输出每个非空的元素。

示例输入文件 (example.txt)

key1: value1 value2 value3
key2: value4 value5 value6

示例输出

key1
value1
value2
value3
key2
value4
value5
value6

这段代码确保在分割每行字符串时去除了前后空格,并正确处理了冒号和空格分割的情况。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 05:56:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 05:56:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 05:56:01       58 阅读
  4. Python语言-面向对象

    2024-07-13 05:56:01       69 阅读

热门阅读

  1. 使用 OpenCV 的 inRange 函数进行颜色分割

    2024-07-13 05:56:01       22 阅读
  2. Web控件进阶交互

    2024-07-13 05:56:01       29 阅读
  3. iOS开发-Xcode

    2024-07-13 05:56:01       21 阅读
  4. Xcode依赖管理大师:精通项目依赖的艺术与实践

    2024-07-13 05:56:01       21 阅读
  5. 数据结构笔记之特殊矩阵压缩

    2024-07-13 05:56:01       26 阅读
  6. 交换机的二三层原理

    2024-07-13 05:56:01       24 阅读
  7. pdf工具

    pdf工具

    2024-07-13 05:56:01      24 阅读
  8. Xcode项目文件与资源管理:精通技巧与实践指南

    2024-07-13 05:56:01       25 阅读
  9. ChatGPT对话:如何制作静态网页?

    2024-07-13 05:56:01       24 阅读
  10. QLabel控件

    2024-07-13 05:56:01       23 阅读
  11. deepstream读取mp4文件及不同类型视频输入bug解决

    2024-07-13 05:56:01       27 阅读
  12. samout 结构再优化 收敛速度再加快

    2024-07-13 05:56:01       24 阅读
  13. 延时订单的实现

    2024-07-13 05:56:01       28 阅读
  14. 数学基础 -- 三角学

    2024-07-13 05:56:01       27 阅读
  15. 07-7.5.2 散列函数的构造

    2024-07-13 05:56:01       27 阅读
  16. React vs Vue:谁是前端界的冠军?

    2024-07-13 05:56:01       24 阅读
  17. [NeetCode 150] Longest Consecutive Sequence

    2024-07-13 05:56:01       21 阅读
  18. sqlserver设置端口

    2024-07-13 05:56:01       22 阅读
  19. C++:using重新定义继承时访问权限

    2024-07-13 05:56:01       29 阅读
  20. git列出提交记录的文件路径

    2024-07-13 05:56:01       23 阅读
  21. 关于对于短视频的认识-复盘与再次复盘

    2024-07-13 05:56:01       23 阅读
  22. sqlalchemy反射视图

    2024-07-13 05:56:01       21 阅读