繁体   English   中英

将笨拙的cstring拆分为不同的数组?

[英]Splitting awkward cstring's into different arrays?

好的,这是交易。 这是一个用于学校的项目,我们不能使用#include <string>。 基本上,对于将要处理的任何字符串,我们都必须使用cstrings或以null终止符结尾的char数组。 基本上是同一件事吧? 好吧,我有点麻烦了。 我必须输入输入文件中的名字,姓氏,学生证和至少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名学生,但最多不能超过60行)。 这只是项目的一部分,但似乎是我无法逾越的一部分。 再说一次,我不需要任何代码或直接答案,也许只是为我指出了解决这个问题的正确方法。 非常感谢!

我不会发布任何代码(按要求),但是考虑通过strtok过滤每一行。 strtok将字符串拆分为标记,可以根据需要随意在其中排列或存储它们。 有关更多信息,请参见此处: http : //www.cplusplus.com/reference/cstring/strtok/

我想您可以按照以下步骤操作:

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库函数会有所帮助

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

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

由于您没有请求代码 ,因此根据您的建议,我将给您一些提示:

您知道每行的最大 长度 为250个字符 (包括换行符吗?)-这是每行的长度,因此,由于它以这种规律性发生,因此您一次可以读取这么多字符使用常规文件函数 ,使用fstream(根据标签推断)。

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

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

首先,查看您的数据,您会观察到什么?

  • 每个单独的数据段(解析术语中的标记)都由至少一个空格字符定界。
  • 此外,名称是任何行的前两个标记,并且其中不包含数字。

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

然后,您要做的就是遍历用于存储C字符串的容器/数据结构,并使用上述条件解析它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM