定义一个函数vector<string> split(const string& s, const string& w),实现功能为利用w或者默认空白字符为分隔符将s分隔成若干子串,并以向量的向形式返回这些子串。C++实现,多文件程序,按文件给出代码,要求有充足的提示信息提示用户输入有关信息
时间: 2024-02-28 08:56:46 浏览: 121
好的,这是一个比较基础的字符串分割函数,以下是实现的代码:
**split.h**
```cpp
#ifndef SPLIT_H
#define SPLIT_H
#include <string>
#include <vector>
std::vector<std::string> split(const std::string& s, const std::string& w = " ");
#endif // SPLIT_H
```
**split.cpp**
```cpp
#include "split.h"
std::vector<std::string> split(const std::string& s, const std::string& w) {
std::vector<std::string> res; // 存储分割后的子串
std::string::size_type pos = 0; // 当前分隔符位置
std::string::size_type prev_pos = 0; // 上一个分隔符位置
while ((pos = s.find(w, prev_pos)) != std::string::npos) {
if (pos > prev_pos) {
res.push_back(s.substr(prev_pos, pos - prev_pos)); // 取出子串
}
prev_pos = pos + w.size(); // 更新分隔符位置
}
if (prev_pos < s.size()) {
res.push_back(s.substr(prev_pos)); // 取出最后一个子串
}
return res;
}
```
**main.cpp**
```cpp
#include <iostream>
#include "split.h"
int main() {
std::string s;
std::string w;
std::cout << "Please enter a string: ";
std::getline(std::cin, s);
std::cout << "Please enter a separator (default is space): ";
std::getline(std::cin, w);
std::vector<std::string> res = split(s, w);
std::cout << "The result is: " << std::endl;
for (const auto& str : res) {
std::cout << str << std::endl;
}
return 0;
}
```
以上是多文件程序的实现,头文件 `split.h` 定义了函数 `split` 的声明,源文件 `split.cpp` 实现了函数 `split` 的定义,主函数在 `main.cpp` 中实现。需要注意的是,头文件中使用了 include guard,防止头文件被重复包含。
在主函数中,先提示用户输入需要分割的字符串和分隔符,然后调用 `split` 函数得到分割后的结果,最后输出结果。
编译命令如下:
```bash
g++ main.cpp split.cpp -o split
```
运行程序后,输入字符串和分隔符即可得到分割后的结果。
阅读全文