我正在尝试将char数组中的多项式系数放入一个int数组中
我有这个:
char string[] = "-4x^0 + x^1 + 4x^3 - 3x^4";
并可以将其标记为空格
-4x ^ 0
x ^ 1
4x ^ 3
3x ^ 4

所以我试图将-4、1、4、3放入一个int数组

 int *coefficient;
 coefficient = new int[counter];

 p = strtok(copy, "  +");
 int a;
 while (p)
 {
  int z = 0;
  while (p[z] != 'x')
   z++;
  char temp[z];
  strncpy(temp[z], p, z);
  coefficient[a] = atoi(temp);
  p = strtok(NULL, "  +");
  a++;
 }

但是,我收到一个错误,我无法将char *转换为char
在strncpy(temp [z],p,z);
error: invalid conversion from ‘char’ to ‘char*’
error: initializing argument 1 of ‘char* strncpy(char*, const char*, size_t)’

最好的方法是什么?

最佳答案

这个:

strncpy(temp[z], p, z);

需要是:
strncpy(temp, p, z);

但是请记住,strncpy并不总是以null结尾的字符串。

同样,z将是系数的长度,但是您需要在缓冲区中为空终止符增加一个字节。

更新:

检查您的链接,我仍然看到几个严重的问题:
  • 您不能在strtok中使用“-”,因为它将拾取“-4x”中的一个以及您想要的一个。我认为您应该只在空格上分割,并将+/-运算符作为标记处理。
  • strncpy函数使字符串不终止,这可能导致atoi崩溃或随机提供错误的值。一种惯用形式是手动编写终止符,例如temp[z] = '\0'
  • 之所以没有得到任何输出值,是因为coefficient[a] =未初始化,因此a正在写入一些随机内存。
  • 关于c++ - C标记化多项式系数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1801220/

    10-14 06:09