在将字符串放入字符串向量时遇到问题?

Having problems putting strings in a vector of strings?

本文关键字:字符串 遇到 问题 向量      更新时间:2023-10-16

晚安, 我有两个字符串作为参数(campo e valor(,我想将它们放在两个单独的向量中,但给了我奇怪的错误,我找不到为什么,我是C++新手,所以这可能是一个新手错误。

我的班级:

/* Includes */
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Geral {
private:
vector<string> v_campo;
vector<string> v_valor;
public:
Geral();
~Geral();
void TomaCampoValor(string campo, string valor);
void Mostrar();
string GetValorCampo(string campo);
bool ExisteCampo(string campo);
};   

这是我的 cpp:

void Geral::TomaCampoValor(string _campo, string _valor) {
int i = 0;
// Searching if there is already the same _campo
for (i = 0; i < v_campo.size(); i++) {
if (v_campo[i].c_str() == _campo) {
v_valor[i].push_back(*_valor.c_str());`
return;
}
}
// If doesn't find it
v_campo[i].push_back(*_campo.c_str());
v_valor[i].push_back(*_valor.c_str());
}

这是给我的错误 给我的错误:

提前谢谢,如果我没有把自己说清楚,请问。

很惊讶这甚至编译

你是说

v_campo.push_back(_campo);
v_valor.push_back(_valor);

编辑:

这也是错误的

(v_campo[i].c_str() == _campo)

你是说

(v_campo[i] == _campo)

确保您不要忽略编译器警告,它们可以帮助您

由于_valorstd::string类型,因此无需从c_str()方法创建std::string

试试这个:

v_campo.push_back(_campo);
v_valor.push_back(_valor);

另一个问题是v_campo[i]std::string类型,std::string没有字符串的push_back方法。

因此,根据您对问题的方法和进一步的问题,我想您需要为营地及其某种功能创建某种数据库,您希望与各自的营地链接。
您可以从以下方法开始:

  • 寻找更优化的数据结构来保存您的数据,因为您希望获得类似以下内容 { "Camp1" : feature_array1, "Camp2" : feature_array2 } (一些提示:键值对和非常快速的插入和查找项目(

  • 尝试在非 POD 类型上调用构造函数,它可以防止一些错误或可以帮助您编译程序。

  • 查看常量引用参数,这可能会有所帮助。

  • std::string不等于 C 样式的 char* 字符串,因为它最终没有 \0,所以你的相等性测试是无用的。

  • 查看using namespace std的利弊

相关文章: