gpt4 book ai didi

c - 如何在 C 中将字符串转换为数值?

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:14 25 4
gpt4 key购买 nike

如果我向你们展示我的程序应该做什么的示例会更好。

输入:

3
Double Double End
Triple Double End
Quadruple Double Triple End

输出:

4
6
24

所以,第一句 Double Double 表示 2*2Triple Double 表示 3*2 并且等等。

单词 End 表示字符串的结尾。

它看起来很简单,但我不知道如何使用字符串并给它们赋值并从那里继续。

这是我到目前为止所做的一切:

#include <stdio.h>
#include <stdlib.h>

int main()
{

int num_of_orders,i,j;
char orders[25];
char str1[25] = "Double";
char str2[25] = "Triple";
char str3[25] = "Quadruple";

scanf("%d", &num_of_orders);

for (i=0; i<num_of_orders+1; i++){
scanf("%s", orders);
}

return 0;
}

最佳答案

如答案的多样性所示,有多种方法可以解决此问题。对于如何在 C 中解决问题通常没有唯一的正确答案。标准库提供了多种工具,使您可以针对几乎任何问题制定多种解决方案。只要代码是正确的并且可以防止错误,那么选择采用哪种方法很大程度上归结为效率问题。对于少量示例代码,很少考虑这一点。

一种方法是认识到您不需要数据文件中的第一行(除非读取/丢弃它以将file-position-indicator移动到文件的开头第一行包含数据。)

这允许您简单地使用一个面向行的输入函数(fgetsgetline)来读取文件中剩余的行。 strtok 然后提供了一种将每一行拆分为单词的简单方法(记住去除 '\n' 或丢弃每行中的最后一个单词)。然后使用strcmp比较每个单词并乘以正确的数量是一件小事。最后,输出乘法的乘积

这是解决该问题的一种略有不同的方法。该程序将从作为第一个参数给出的文件名(或默认情况下从 stdin)读取:

#include <stdio.h>
#include <string.h>

enum { MAXC = 64 };

int main (int argc, char **argv) {

char buf[MAXC] = ""; /* line buffer */
char *delims = " \n"; /* delimiters */
int idx = 0; /* line index */
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;

if (!fp) { /* validate file pointer */
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}

while (fgets (buf, MAXC, fp)) { /* read each line */
if (!idx++) continue; /* discard line 1 */
char *p = buf;
size_t len = strlen (p); /* get length */
int prod = 1;
if (len && buf[len-1] == '\n') /* check for '\n' */
buf[--len] = 0; /* remove newline */
printf (" %s", buf); /* output buf before strtok */

/* tokenize line/separate on delims */
for (p = strtok (p, delims); p; p = strtok (NULL, delims))
{ /* make comparson and multiply product */
if (strcmp (p, "Double") == 0) prod *= 2;
if (strcmp (p, "Triple") == 0) prod *= 3;
if (strcmp (p, "Quadruple") == 0) prod *= 4;
}
printf (" = %d\n", prod); /* output product */
}

if (fp != stdin) fclose (fp); /* close file if not stdin */

return 0;
}

使用/输出

$ ./bin/dbltrpl <../dat/dbltrpl.txt
Double Double End = 4
Triple Double End = 6
Quadruple Double Triple End = 24

请仔细阅读,如果您有任何问题,请告诉我。

关于c - 如何在 C 中将字符串转换为数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com