我想在矢量中存储字符。但是当我想回退匹配的字符时,它不起作用。
此行显示错误-
v.push_back(arithmetic_operator[i]);
整个代码是-
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<char>v;
char str[100];
gets(str);
char *ptr;
ptr = strtok(str, " ");
char arithmetic_operator[6][6] = {"+", "-", "*", "/", "%", "="};
while(ptr !=NULL)
{
// arithmetic operator
for(int i=0; i<sizeof(arithmetic_operator); i++){
if(strcmp(arithmetic_operator[i], ptr) == 0)
{
v.push_back(arithmetic_operator[i]);
}
else
{
continue;
}
}
ptr = strtok(NULL, " ");
}
for (auto it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
return 0;
}
当输入为a = b + c时, 预期的输出将是=,+
答案 0 :(得分:3)
#include<bits/stdc++.h>
没有。决不。从来没有。不要这样做,要非常谨慎地对待显示该代码的示例代码(最好忽略它,找到不垃圾的东西)。
vector<char>v;
v.push_back(...);
documentation for push_back
表明vector<char>
将期望使用char作为参数。
char arithmetic_operator[6][6] = {"+", ... };
但是显然arithmetic_operator[i]
就像一个字符。如果打印出 whole 错误,它甚至可能告诉您类型是什么,但是作为提示,arithmetic_operator[i][0]
将设为char
答案 1 :(得分:0)
要回答您的问题:您正在将char*
传递到vector<char>
。因此,将v
定义为vector<char*>
将解决该错误。
此外,正如已经指出的,gets
在C ++ 11中是deprecated,在C ++ 14中将被删除。对于相同的功能,可以使用std::fgets
。看看here。