【问题标题】:Convert int to char then push back to vector将 int 转换为 char 然后推回向量
【发布时间】:2020-12-18 18:28:43
【问题描述】:

我在将 int 转换为 char 时遇到问题。代码如下:

 int main {
  int i = 10;
  char c[80];
  std::vector<char> data; 

  sprintf(i,"%d",c);
  data.push_back(c)
}

但我不断收到从 char* 到 std::vector 的无效转换...错误。有没有更简单的方法将整数转换为字符,然后将其存储在包含字符的向量中?由于之前的任务,我需要先将值作为 int 引入,然后将整数 10 作为 '10' 带入向量中。

【问题讨论】:

  • 你的变量 c 不是一个字符,它是一个字符数组,你的向量数据包含字符,如果你想向向量添加一个字符,它的工作方式如下:data.push_back('a');
  • “数据”是 char 的向量,而不是 char* 。您正在尝试将 char 而不是 char* 传递给 push_back。要将 char* 存储在向量中,请使用 vector。但要小心存储局部变量的指针。在您的情况下, c 是本地的,它将在范围完成后被删除。
  • cchar 的原始数组,因此它的类型是char*,因为它指向该数组的第一个元素。因此,您只能将该数组的元素(如c[0])推回该向量中。也许您想改用std::string
  • textf 声明在哪里?
  • 字符和字符串不是一回事。你真的想要一个字符向量,还是你想要一个字符串向量?不知道这是一个很难回答的问题。

标签: c++ string vector char


【解决方案1】:

对于初学者来说,似乎有一个错字

sprintf(text,"%d",f);

你说的

sprintf( c ,"%d", i );

这个向量的值类型

std::vector<char> data;

char。因此,在成员函数 push 中,您必须提供一个类型为 char 的表达式。但是在这次通话中

data.push_back(c);

你提供了一个数组类型的对象

char c[80];

如果你想在向量中存储一个数字的字符表示作为单独的字符,那么你可以写例如

size_t n = strlen( c );
data.reserve( n );
data.assign( c, c + n );

或者您可以通过数字的表示来声明初始化它的向量,例如

std::vector<char> data( c, c + n );

如果你想将整数存储为向量的一个元素,那么你应该像这样声明向量

std::vector<std::string> data( 1, std::to_string( i ) );

【讨论】:

  • 这行得通,让我深入了解了一些我不了解的关于 c++ 如何将内容存储到向量中的内容。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2020-03-01
  • 2015-09-14
相关资源
最近更新 更多