C++string与vector及buffer互相转换

一般利用其构造函数或assign赋值;

1. char buffer[] 与 string 互转
buffer --> string
string str(buffer);
str.assign(buffer);
str.assign(buffer, strlen(buffer));
str.assign(buffer, sizeof(buffer)/sizeof(buffer[0])-1);

string --> buffer
strncpy(buffer, str.c_str(), str.size()+1); //+1 include '\0';
std::copy(str.begin(), str.end(), buffer);

2. char buffer[] 与 vector<char> 互转
buffer --> vector<char>
vector<char> vec(buffer, buffer+sizeof(buffer)/sizeof(buffer[0]-1)); //will assign length char
vec.assign(buffer, buffer+sizeof(buffer)/sizeof(buffer[0])-1); //will assign length char

vector<char> --> buffer
std::copy(vec.begin(), vec.end(), buffer);

3. string 与 vector<char> 互转
string --> vector<char>
vector<char> vec(str.begin(), str.end());
vec.assign(str.begin(), str.end());

vector<char> --> string
string str(vec.begin(), vec.end());
str.assign(vec.begin(), vec.end());
 

参考代码如下

/*****************************************
* Copyright (C) 2020 * Ltd. All rights reserved.
* File name   : string.buff.vector.convert.cpp
*******************************************/

/*
 * #include <cstdio>
 * #include <cstdlib>
 * #include <cstring>
 */
#include <iostream>
#include <string>
#include <vector>
using namespace std;

#define print(s) do {cout << "[" << __func__ << "] " << #s << ": "  << s << endl;} while (0);

template <class T>
void show(T& val)
{
	typename T::iterator it;
	cout << "[" << __func__ << "]: ";
	for (it = val.begin(); it != val.end();)
	{
		cout << *it;
		it++;
		if (it != val.end()) {
			cout << ", ";
		}
	}
	cout << endl;
}

void buffer2string()
{
	char buffer[] = "hello 1234567890";
	string str(buffer);
	print(str);

	string str0;
	str0.assign(buffer);
	print(str0);

	string str1;
	str1.assign(buffer, sizeof(buffer)/sizeof(buffer[0])-1);
	print(str1);
}

void string2buffer()
{
	char buffer[20] = { 0 };
	string str = "hello 1234567890";

	/*
	 * strncpy(buffer, str.c_str(), str.size()+1);
	 * print(buffer);
	 */

	char buffer2[20] = { 0 };
	std::copy(str.begin(), str.end(), buffer2);
	print(buffer2);
}

void buffer2vector()
{
	char buffer[] = "hello 1234567890";
	vector<char> vec(buffer, buffer+sizeof(buffer)/sizeof(buffer[0])-1);
	show(vec);

	vector<char> vec2;
	vec2.assign(buffer, buffer+sizeof(buffer)/sizeof(buffer[0])-1);
	show(vec2);
}

void vector2buffer()
{
	char tmp[20] = "hello 1234567890";
	vector<char> vec(tmp, tmp+sizeof(tmp)/sizeof(tmp[0]));

	char buffer[20];
	std::copy(vec.begin(), vec.end(), buffer);
	print(buffer);
}

void string2vector()
{
	string str = "hello 1234567890";
	vector<char> vec(str.begin(), str.end());
	show(vec);

	vector<char> vec2;
	vec2.assign(str.begin(), str.end());
	show(vec2);
}

void vector2string()
{
	string tmp = "hello 1234567890";
	vector<char> vec(tmp.begin(), tmp.end());

	string str(vec.begin(), vec.end());
	print(str);

	string str2;
	str2.assign(vec.begin(), vec.end());
	print(str2);
}

int main() {
	buffer2string();
	string2buffer();
	buffer2vector();
	vector2buffer();
	string2vector();
	vector2string();
	return 0;
}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++中可以使用fstream读取txt文件并解析到vector<string>中。 代码示例如下: ```c++ #include <fstream> #include <string> #include <vector> using namespace std; int main() { vector<string> lines; string line; ifstream infile("example.txt"); while (getline(infile, line)) { lines.push_back(line); } infile.close(); //遍历vector for (int i = 0; i < lines.size(); i++) { cout << lines[i] << endl; } return 0; } ``` 其中,"example.txt"是需要读取的文件名。 另外还可以使用 C standard library 中的 fopen 和 fgets 读取文件,解析到vector<string>中。 代码示例如下: ```c++ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <vector> using namespace std; int main() { vector<string> lines; char line[1024]; FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Error opening file"); return(-1); } while (fgets(line, sizeof(line), file)) { lines.push_back(line); } fclose(file); //遍历vector for (int i = 0; i < lines.size(); i++) { printf("%s", lines[i].c_str()); } return 0; } ``` ### 回答2: 在C语言中,要读取txt文件并将其解析为vector<string>格式,可以采用以下步骤: 1. 首先,需要包含相关的头文件,例如stdio.h和stdlib.h。这些头文件包含了一些用于文件操作的函数。 2. 创建一个FILE指针,用于打开和读取txt文件。可以使用fopen函数打开文件,并使用相应的模式(例如"r"表示只读方式打开文件)。 3. 创建一个vector<string>类型的变量,用于存储读取的文本行。可以使用vector容器来动态管理字符串数组。 4. 使用fgets函数从文件中逐行读取文本数据。可以使用循环来逐行读取整个文件内容,直到文件结尾。 5. 在每次读取到的文本行后,将其存储到vector<string>变量中。可以使用push_back函数将字符串添加到vector的末尾。 6. 当文件读取完毕后,关闭文件指针,使用fclose函数关闭已打开的文件。 7. 最后,可以通过遍历vector<string>来输出读取到的文本行,或者在需要的地方对文本行进行进一步处理。 下面是一个简单的示例代码,演示了如何在C语言中实现以上步骤: ```c #include <stdio.h> #include <stdlib.h> #include <vector> int main() { FILE *fp; char line[256]; std::vector<std::string> lines; // 打开txt文件 fp = fopen("example.txt", "r"); if (fp == NULL) { printf("无法打开文件\n"); return 1; } // 逐行读取文本数据 while (fgets(line, sizeof(line), fp)) { // 存储文本行到vector中 lines.push_back(line); } // 关闭文件 fclose(fp); // 输出读取到的文本行 for (int i = 0; i < lines.size(); i++) { printf("第%d行:%s", i+1, lines[i].c_str()); } return 0; } ``` 这样,在C语言中我们就可以读取txt文件并将其解析为vector<string>格式了。 ### 回答3: 在C语言中读取txt文件并将其解析为vector<string>格式,可以通过以下步骤实现: 1. 打开文件:首先需要使用C语言的文件操作函数打开要读取的txt文件。可以使用fopen函数来完成此操作。例如,可以使用以下代码打开名为"example.txt"的文件: ```c FILE* file = fopen("example.txt", "r"); ``` 2. 读取文件内容:使用fgets函数逐行读取文件的内容。可以使用一个字符数组(例如char buffer[256])来存储每行的内容。fgets函数每次读取一行,直到文件结束。例如,可以使用以下代码读取文件内容: ```c char buffer[256]; while (fgets(buffer, sizeof(buffer), file)) { // 进行处理 } ``` 3. 解析内容为vector<string>格式:将读取的每行内容解析为string类型,并依次存储到vector<string>中。可以使用C++标准库的string类和vector容器来完成此操作。例如,可以使用以下代码将每行内容存储到vector<string>中: ```c #include <vector> #include <string> std::vector<std::string> lines; char buffer[256]; while (fgets(buffer, sizeof(buffer), file)) { std::string line(buffer); lines.push_back(line); } ``` 4. 关闭文件:完成文件的读取后,需要使用fclose函数关闭文件。例如,可以使用以下代码关闭文件: ```c fclose(file); ``` 通过以上步骤,可以在C语言中读取txt文件并将其解析为vector<string>格式。在解析之后,可以对vector<string>进行进一步的操作和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值