- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设用户输入“-4x^0 + x^1 + 4x^3 - 4x^5 - 3x^7”
作为输入。我想从字符串中提取值并将它们传递给 coef[]
和 expo[]
所以它看起来像这样:
coef = [-4, 1, 0, 4, 0, -4, 0, -3]
expo = [ 0, 1, 2, 3, 4, 5, 6, 7]
这是我到目前为止所拥有的,但我不知道如何使用 token 。
int main()
{
char userInput[100];
char temp[100];
printf("Enter the polynomial: ");
scanf("%[^\n]%*c", userInput);
strcpy(temp, userInput);
printf("\n");
int coef[100];
int expo[100];
for (int i = 0; i < 100; i++) {
coef[i] = 0;
expo[i] = 0;
}
char *tok = strtok(temp, "x^");
int counter = 0;
while (tok) {
printf("*%s*\n", tok);
tok = strtok(NULL, "x^");
counter++;
}
return 0;
}
我尝试了以下方法,但没有成功:
int counter = 0;
while (tok) {
printf("*%s*\n", tok);
expo[counter] = atoi(tok);
tok = strtok(NULL, "x^");
counter++;
}
最佳答案
由于用户输入中的空格以及丢失指数和系数的可能性,以及由于 1
和省略而丢失的系数,这是一个比我最初假设的问题更棘手的问题。
这是可以完成的,但它需要在标记化之前进行装饰,其中您装饰要使用指数和系数之间的新分隔符来标记化的字符串,以确保您可以使用strtok()。否则,因为必须保留 +/-
并且输入格式可以是,例如"4x^1 + 3x^2"
除了 '+' 周围的空格外,
必须被视为 1
和 3
之间没有分隔符3
的一部分。
格式化输入中的临时字符串的一个简单方法是删除所有空格并在指数和系数之间添加一个新的'x'
。这允许您使用与 strtok() 相同的分隔符字符串,例如“x^\n”
无需调整。
可以通过从当前索引循环到指数,为系数分配 0
并为指数分配循环计数器来处理丢失的系数和指数。然后您可以添加当前系数和指数。
将其放在一起并使用 sscanf()
来最低程度验证从字符串到 int
的每次转换,您可以执行类似于以下操作的操作:
#include <stdio.h>
#include <string.h>
#define MAXC 1024 /* if you need a constant, #define one (or more) */
#define MAXCOEF 256
#define MAXEXP MAXCOEF
#define DELIM "x^\n"
int main (void) {
char buf[MAXC], tmp[MAXC]; /* input & reformat buffers */
int coef[MAXCOEF] = {0}, /* coefficient array */
expo[MAXEXP] = {0}, /* exponent array */
n = 0, ndx = 0; /* counter and index */
fputs ("enter polynomial: ", stdout); /* prompt */
if (!fgets (buf, MAXC, stdin)) { /* read line in buf/validate */
puts ("(user canceled input)");
return 0;
}
for (int i = 0; buf[i]; i++) { /* loop remormat buf in tmp */
if (buf[i] != ' ') { /* if not space */
if (buf[i] == '-' || buf[i] == '+') { /* if before next coef */
tmp[n++] = 'x'; /* decorate with new 'x' */
}
tmp[n++] = buf[i]; /* add from buf to tmp */
}
else { /* otherwise was ' ' */
if (buf[i+1] == 'x') { /* if next char is 'x' */
tmp[n++] = '1'; /* coef not given - use 1 */
}
}
}
tmp[n] = 0; /* nul-terminate tmp */
/* separate each token with strtok */
for (char *tok = strtok (tmp, DELIM); tok; tok = strtok (NULL, DELIM)) {
int ctmp, etmp; /* temp values for coefficient and exponent */
if (sscanf (tok, "%d", &ctmp) != 1) { /* convert coefficient to int */
fprintf (stderr, "conversion failed for '%s'.\n", tok);
return 1;
}
if (!(tok = strtok (NULL, DELIM))) { /* get exponent token */
break;
}
if (sscanf (tok, "%d", &etmp) != 1) { /* convert exponent to int */
fprintf (stderr, "conversion failed for '%s'.\n", tok);
return 1;
}
for (int i = ndx; i < etmp; i++) { /* loop index to exponent */
coef[ndx] = 0; /* add any missing values */
expo[ndx++] = i; /* increment index */
}
coef[ndx] = ctmp; /* add coefficient & exponent */
expo[ndx++] = etmp; /* increment index */
}
fputs ("\ncoef:", stdout); /* output coefficients */
for (int i = 0; i < ndx; i++) {
printf (" % d", coef[i]);
}
putchar ('\n'); /* tidy up with newline */
fputs ("expo:", stdout); /* output exponents */
for (int i = 0; i < ndx; i++) {
printf (" % d", expo[i]);
}
putchar ('\n');
}
示例使用/输出
$ ./bin/strtokpoly
enter polynomial: -4x^0 + x^1 + 4x^3 - 4x^5 - 3x^7
coef: -4 1 0 4 0 -4 0 -3
expo: 0 1 2 3 4 5 6 7
这对应于您所需的输出。
仔细检查一下,如果有疑问请告诉我。
关于c - 在 C 中,我应该如何使用 strtok 从多项式输入中提取系数和指数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74333505/
我已经训练了一个线性回归模型来以多输出方式进行预测。这是一个时间序列预测问题,根据一组输入来估计 future 12 个月的需求。在过去 - 如果我只预测一个输出值 - 我会简单地调用以下命令来访问模
我的应用程序对原始音频信号执行FFT(所有麦克风读数均为values中的16位整数值,即1024个单元)。它首先根据16位对读数进行归一化。然后提取频率为400Hz的幅度。 int sample_ra
我从包含相同语音内容的两个大约 30 秒的音频文件中提取了两个系列 MFCC 系数。音频文件从不同来源录制在同一位置。应该估计音频是否包含相同的对话或不同的对话。目前我已经测试了两个Mfcc系列的相关
我正在尝试使用两个自变量(批处理和方法)和一个因变量 (conc) 运行线性回归。当我运行回归时,我得到一个系数的 NA 值。当我更改模型中自变量的顺序时,NA 值显示为不同的变量。这是一个可重现的数
我想要的,大图:我想知道如何在 Java 中模仿 Mathematica 的 ExtendedGCD[...] 功能。有关该功能的信息可以在 here 中找到,但为了完整起见,我将对其进行简要描述。
我用 R 编写了这个套索代码,并且得到了一些 beta 值: #Lasso library(MASS) library(glmnet) Boston=na.omit(Boston) x=model.m
我有一个幅频响应点列表。振幅以分贝为单位给出。 任务是将此 AFR 列表导出为某些硬件 DSP 设备的一组系数。我知道此设备的文件格式。该设备的规范表明它需要 12288 个系数,并且 DSP 有 2
是否可以替换 lm 对象中的系数? 我认为以下会起作用 # sample data set.seed(2157010) x1 <- 1998:2011 x2 <- x1 + rnorm(length(
我正在尝试使用 lm.ridge 方法执行岭回归。我的问题是如何获得拟合模型的系数?我从调用中得到不同的结果: 模型$coef 系数(模型) 哪个是正确的?另外,为什么我从调用中得到不同的结果: co
以下代码片段死于 Eigen 断言: MatrixXd L; VectorXd x, b; ... ASSERT_MATRIX_EQ(L*x, b); 与, template void ASSERT
有没有办法从编码的图像和视频中轻松提取 DCT 系数(和量化参数)?任何解码器软件都必须使用它们来解码 block DCT 编码的图像和视频。所以我很确定解码器知道它们是什么。有没有办法将它们暴露给使
如何找到矢量 w 是多少,即垂直于分离平面? 最佳答案 我就是这样做的here .如果我没记错的话,这是基于 dual form 的SVM 优化的结果。 model = svmtrain(...);
我是 FFMPEG 的新手。我知道如何提取关键帧, 但现在我想提取那些 I 帧的 DC 系数。 您能否帮助编写 FFMPEG 命令的正确语法以获取 DC 系数? 问候 最佳答案 FFmpeg 命令不会
任何人都可以共享任何代码或可调用以从 HEVC 比特流中提取变换系数 (DCT/DST) 的函数吗? 我检查了 HM 16.0 的源代码。文件\source\Lib\TLibCommon\TComTr
我需要从 MPEG4 视频中提取有关运动矢量和 DC 系数的信息。我搜索了相关站点和主题,发现一个好的解决方案是使用 ffmpeg 编解码器的代码。尤其是 libavcodec/mpegvideo.c
我想删除sympy符号表达式中等于1的任何系数,例如:我希望 1.0x**2 成为 x**2 ,有办法做到吗?另外,如果可能的话,可以对整数进行舍入,例如将 2.0x**2 变为 2*x**2 最佳答
我想删除sympy符号表达式中等于1的任何系数,例如:我希望 1.0x**2 成为 x**2 ,有办法做到吗?另外,如果可能的话,可以对整数进行舍入,例如将 2.0x**2 变为 2*x**2 最佳答
我最近的任务是将 PMML 解析回 R 模型。 (我进行了广泛搜索,没有库可以为您进行这种转换。)我正在尝试将包含多项逻辑回归的 PMML 转换回 R 模型,但我不知道如何转换任何PMML 文档中保存
当使用 pandas statsmodels 的 .summary() 函数时,OLS 回归结果包括以下字段。 coef std err t P>|t| [
我正在 STM32F4 微 Controller 上使用 CMSIS 库开发 PID Controller 。我实在无法理解PID参数的归一化。现在我有了 PID Controller 的三个 Kp、
我是一名优秀的程序员,十分优秀!