c++ string \t 分隔存入VECTOR
时间: 2024-12-26 21:12:32 浏览: 6
在C++中,如果你想要将字符串按照`\t`分隔符存储到`std::vector<std::string>`中,你可以使用`std::stringstream`或者直接遍历原字符串并分割。这里是一个简单的示例:
```cpp
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
// 将字符串按照\t分隔到vector中
std::vector<std::string> splitString(const std::string& input) {
std::vector<std::string> result;
std::stringstream ss(input);
std::string item;
while (std::getline(ss, item, '\t')) {
result.push_back(item); // 添加每个字段到vector
}
return result;
}
int main() {
std::string str = "field1\tfield2\tfield3";
std::vector<std::string> fields = splitString(str);
for (const auto& field : fields) {
std::cout << field << "\n"; // 打印每个字段
}
相关问题
用C++读取一个有多列数据的txt文件,并把数据存入vector中
假设txt文件中每行数据格式为"列1 列2 列3 ...",其中每列数据之间用空格或制表符分隔,可以按照以下步骤读取并存入vector中:
1. 包含必要头文件
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
```
2. 声明一个结构体或类来存储每行数据
```c++
struct Data {
int col1;
double col2;
std::string col3;
// ...其他列数据的类型和名称
};
```
3. 读取txt文件并解析每行数据
```c++
std::vector<Data> dataVec; // 定义存储数据的vector
std::ifstream inFile("data.txt"); // 打开txt文件
if (!inFile) {
std::cerr << "Failed to open file!" << std::endl;
return -1;
}
std::string line; // 存储每行数据的字符串
while (std::getline(inFile, line)) {
Data data; // 定义一个结构体对象来存储该行数据
std::istringstream iss(line); // 将该行数据转换为istringstream对象
iss >> data.col1 >> data.col2 >> data.col3; // 解析每列数据并存入结构体对象中
// ...解析其他列数据并存入结构体对象中
dataVec.push_back(data); // 将该行数据的结构体对象存入vector中
}
```
4. 关闭文件并使用vector中的数据
```c++
inFile.close(); // 关闭文件
// 使用vector中的数据,例如输出第一行第二列数据
std::cout << "The second column of the first row is: " << dataVec[0].col2 << std::endl;
```
完整代码如下:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
struct Data {
int col1;
double col2;
std::string col3;
// ...其他列数据的类型和名称
};
int main() {
std::vector<Data> dataVec; // 定义存储数据的vector
std::ifstream inFile("data.txt"); // 打开txt文件
if (!inFile) {
std::cerr << "Failed to open file!" << std::endl;
return -1;
}
std::string line; // 存储每行数据的字符串
while (std::getline(inFile, line)) {
Data data; // 定义一个结构体对象来存储该行数据
std::istringstream iss(line); // 将该行数据转换为istringstream对象
iss >> data.col1 >> data.col2 >> data.col3; // 解析每列数据并存入结构体对象中
// ...解析其他列数据并存入结构体对象中
dataVec.push_back(data); // 将该行数据的结构体对象存入vector中
}
inFile.close(); // 关闭文件
// 使用vector中的数据,例如输出第一行第二列数据
std::cout << "The second column of the first row is: " << dataVec[0].col2 << std::endl;
return 0;
}
```
c++ string字符串分割
C++ 中有多种方法可以对字符串进行分割,以下是其中一种常见的方法:
```cpp
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int main() {
std::string str = "hello world,how are you?";
std::stringstream ss(str);
std::vector<std::string> tokens;
std::string token;
char delimiter = ',';
while (std::getline(ss, token, delimiter)) {
tokens.push_back(token);
}
tokens.push_back(ss.str().substr(ss.tellg()));
for (const auto& t : tokens) {
std::cout << t << std::endl;
}
return 0;
}
```
这个例子使用了 stringstream 和 vector 两个 STL 容器,首先将字符串放入 stringstream 中,然后使用 getline 函数以 ',' 为分隔符对字符串进行分割,并将每个子字符串存入 vector 中,最后输出每个子字符串。
需要注意的是,最后一个子字符串需要使用 substr 和 tellg 函数进行特殊处理,否则可能会出现丢失的情况。
阅读全文