gpt4 book ai didi

C语言,将2个字符串转换并组合成一个double

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

我的 C 编程需要帮助,因为我的教授太忙而无法回复(第 6 天现在无法在他的办公室找到,也无法回复电子邮件)。假设我有一个结构定义为

typedef struct {
char whole[1000];
char decimal[1000];
double number;
} record;

其中 whole 代表数字的整数部分 (例如 10, 20, 301, 123, 1005...)decimal 代表数字的小数部分 (10.123, 20.22123, 301.99181, 123.558123...)。数字被视为字符串并写入二进制文件,例如。

10 1234 (10 is the whole part and 1234 is the decimal part of the number = 10.1234)
20 211291 (20.211291)
301 2102190 (301.2102190)
1 56615 (1.56615)
988 001 (988.001)
etc.

我的代码:

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

typedef struct {
char whole[1000];
char decimal[1000];
double number;
} record;

int cmp(record *a, record *b) {
????
return ???;
}
main()
{
FILE *f = fopen("records.bin", "r+b");
if (!f)
exit(1);
fseek(f, 0, SEEK_END);
long size = ftell(f);
long N = size / sizeof(record);
fseek(f, 0, SEEK_SET);
record *z = malloc(size);
fread(z, sizeof(record), N, f);
qsort(z, N, sizeof(record), (int(*)(const void*, const void*))cmp);
/* fopen (wb) fwrite(...) flush, free, fclose*/
...
}

我将如何编写比较函数来获取这 2 个字符串(整数和小数)并将它们组合成一个 double 值,然后我将对其进行升序排序?我试过使用 atofsscanf 但不太确定如何在比较函数中使用二进制文件结构来完成它。

最佳答案

您的尝试有一些问题:

  • record 结构中的 number 字段似乎没有任何用处。
  • 以二进制模式读取文件似乎很浪费,因为它可以通过这种方式轻松解析为测试字符串:

    fscanf(input, "%999s %999s", z->whole, z->decimal);

您甚至可以通过使用 . 分隔整数部分和小数部分来使源文件完全可读,然后使用 "%999s.%999s" 作为格式字符串。

您可以通过以下步骤比较字符串格式的数字:

  • 跳过两个整个部分中的任何初始零
  • 比较结果字符串的长度:如果它们不同,如​​果第一个较短则返回 -1,如果第一个较长则返回 1。
  • 如果两个字符串的长度相同,比较它们。如果不同,则返回比较结果,即返回strcmp(a->whole, b->whole)的结果。
  • 如果两个整体部分相等,则通过移除尾随零来标准化派系部分。
  • 比较结果就是比较这些字符串的结果,即:return strcmp(a->decimal, b->decimal);

编写代码是您现在的任务。理想情况下,您的代码应在不更改记录的情况下实现上述步骤。

关于C语言,将2个字符串转换并组合成一个double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41625791/

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