【问题标题】:Splitting awkward cstring's into different arrays?将尴尬的 cstring 拆分为不同的数组?
【发布时间】:2023-03-12 14:05:02
【问题描述】:

好的,这就是交易。这是学校的项目,我们不能使用#include 。 基本上,对于我们将要处理的任何字符串,我们必须使用 cstrings 或以空终止符结尾的 char 数组。基本上是一样的吧?嗯,我有点麻烦。我必须从输入文件中读取名字、姓氏、学生 ID 以及至少 5 个等级但最多 6 个等级。看看下面的样子,但有一个问题。每个细节之间可以有任意数量的空格,行的最大长度为 250。下面是输入示例。

Adam Zeller 452231     78    86 91   64 90       76
Barbara Young 274253 88   77  91    66  82    
Carl Wilson 112231       87    77    76   78  77    82

注意,细节之间有随机数量的空格。基本上,我需要获取姓名(名字和姓氏的长度都可以不同),将学生 ID 读入一个 int,然后读取他们的所有其余成绩(最好读入一个 int 数组)。此外,他们可以有 5 或 6 个等级,程序应该能够处理任何一个。我到底该如何对这些数据进行排序?我想也许我可以将 getline() 放入整行的 cstring char 数组中,然后将每个位相应地分隔到每个数组中,但我只是不知道该怎么做。无限期地,我不希望任何人给我任何代码,但也许会指出我如何去做的正确方向。将一行数据分类为不同的变量,同时在不影响数据的情况下考虑 5 或 6 个等级,并且列表最长可达 60 行(意味着最多有 60 名学生,但不超过此)。这只是项目的一部分,但似乎是我无法通过的一部分。再说一次,我不想要任何代码或直接答案,也许只是指出我可以解决这个问题的正确方向。非常感谢!

【问题讨论】:

    标签: c++ arrays char fstream cstring


    【解决方案1】:

    我不会发布任何代码(按要求),但考虑通过strtok 过滤每一行。 strtok 将字符串拆分为标记,您可以随意排列或存储它们。更多信息请看这里:http://www.cplusplus.com/reference/cstring/strtok/

    【讨论】:

      【解决方案2】:

      我猜你可以按照以下步骤操作:

      read a line
      get the words from the line
      first two words are first and last names
      rest of the words are number, use atoi to get the numbers from string
      continue the above till EOF
      

      你是怎么得到单词的?可能是“isspace”c 库函数会有所帮助

      【讨论】:

        【解决方案3】:

        从技术上讲,这是一个技巧项目/问题。

        文件中解析行最难的部分是如您所说:处理随机数量的空格。

        既然你要求无代码,我会根据你的建议给你一些提示:

        您知道每行的长度最多为 250 个字符(包括换行符?) - 这是每行的长度,因此,因为它以这样的规律发生,您可以使用常规文件函数一次读取这么多字符,使用 fstreams(从您的标签中推断)。

        真正的唯一问题是存储这些令牌。如果您提前知道要存储多少,您可以定义一个 c 字符串数组(因为您不能使用 @987654321 @) 由您认为会发生的最大数量组成。但是,由于这既不可靠又有点效率低下(如果选择太多行来存储会浪费内存),您可以使其动态。在这方面,您可以选择使用像 <vector> 这样的 C++ 容器,以便于访问和存储。

        之后,找出每行数据的值相对很容易:

        首先,看看你的数据,你观察到了什么?

        • 每个单独的数据片段(解析命名法中的标记)至少由一个空格字符分隔。
        • 此外,名称是任何行的前两个标记,其中不包含数字。

        因此任何没有空格或数字的东西都属于字符串,在这种情况下:名称的一部分。

        然后,您所要做的就是遍历用于存储 c 字符串的容器/数据结构,并使用上述标准对其进行解析。

        【讨论】:

          猜你喜欢
          • 2014-02-19
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多