【问题标题】:Reading a line from a file and parsing it in C从文件中读取一行并在 C 中解析它
【发布时间】:2014-01-02 12:07:02
【问题描述】:

我是一名学生,正在学习 C 语言。对于我的任务,我有一个 txt 文件,我从中获取命令,例如

    S X 11,156;21,234

前2个字符是在指挥我,我对他们没有任何问题,他们会通过很多开关来解决。

数字很重要,我必须将它们堆叠起来。逗号分隔属性,分号分隔主要元素。喜欢;第一个元素的第一个属性是 11,第二个元素的第一个属性是 76,依此类推。我可以将这些属性放入 2 个不同的堆栈中。

后面会处理第一个属性,所以第一个属性必须是10-99之间的float类型。第二个属性是 100-999 之间的整数。

属性会随机给出,我不知道有多少元素,但我确定最多有20个元素。

不允许使用结构体(我什至不知道它们是什么),所以我必须用字符串创建一个堆栈。

我是“堆栈”概念的新手,所以我无法自己创建它。那么你能帮我用这些数字创建一个堆栈吗?

(我多次搜索该网站,但找不到任何匹配的问题。)

我尝试为属性创建 2 个字符串并使用 strncat 函数来添加数字,但我所能做的就是将数字设为“1”、“1”、“4”等,但它失败了,因为我需要这些数字作为“11”、“156”等。我怎样才能得到这样的数字?

我尝试的是;

    strncat (str1, row+x, 2);
    strncat (str2, row+x+2, 3);
    strcat (str1, ", ");
    strcat (str2, ", ");

【问题讨论】:

  • 不允许使用结构体(我什至不知道它们是什么),所以我必须用字符串创建一个堆栈。 那句话的矛盾在哪里。除了你写了什么代码。 ) 从星期日开始改变)
  • 我没完全听懂你的意思(我的英文不是很好)但无论如何,我更新了问题。

标签: c arrays string import stack


【解决方案1】:

显然,鉴于这是一项学校作业,人们不会将答案交给您,但可以为您指明正确的方向。

这里有许多概念是您应该学习或应该学习以完成作业的。这些是文件和输入处理、数据结构(特别是堆栈)。

您应该分解这些并逐一学习。你可以在这里了解堆栈数据结构Stack (abstract data type)

【讨论】:

  • 是的,这是学校作业,我一开始就说我是小学生。这只是任务的一小部分,而不是全部。无论如何,我明白你的意思。
  • 更新了问题并缩小了我的要求。也许你现在可以帮助我? :)
  • 好的,回到文件和输入处理,你显然可以从文件中读取,所以现在你可能想在这里和其他地方寻找关于字符串解析的答案。这应该会让你进入下一步。
  • 好的,我一直在寻找一些答案,“sscanf”似乎很有用,但我找不到如何结束变量限制; sscanf ("SX %d,%d;&d............." &var1, &var2, &var3) 等但是如果只有 4 个变量,我怎么能理解?还是我应该写最大数量的变量?
【解决方案2】:

我一直在寻找一些答案,“sscanf”似乎很有用 但我找不到如何结束变量限制; sscanf ("S X %d,%d;&d......" &var1, &var2, &var3) 等等,但我怎么能 了解是否只有 4 个变量?还是我应该写最大数量 变量呢?

两种方式都可以:

int a[20][2];   // max. 20 elements with 2 attributes
// scanf("S X");
for (nelem = 0; scanf("%d,%d", &a[nelem][0], &a[nelem][1]) == 2; )
{
    nelem++;    // We have read one more element's attributes
    if (getchar() != ';') break;
}

int a[20][2];   // max. 20 elements with 2 attributes
nelem =
  scanf("S X%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;"
           "%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d;%d,%d "
   , &a[ 0][0], &a[ 0][1], &a[ 1][0], &a[ 1][1], &a[ 2][0], &a[ 2][1], &a[ 3][0], &a[ 3][1]
   , &a[ 4][0], &a[ 4][1], &a[ 5][0], &a[ 5][1], &a[ 6][0], &a[ 6][1], &a[ 7][0], &a[ 7][1]
   , &a[ 8][0], &a[ 8][1], &a[ 9][0], &a[ 9][1], &a[10][0], &a[10][1], &a[11][0], &a[11][1]
   , &a[12][0], &a[12][1], &a[13][0], &a[13][1], &a[14][0], &a[14][1], &a[15][0], &a[15][1]
   , &a[16][0], &a[16][1], &a[17][0], &a[17][1], &a[18][0], &a[18][1], &a[19][0], &a[19][1]
       ) / 2;   // number of elements is half the number of attributes read

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2020-08-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多