从文件中读取数据,仅字母字符

冰柜男孩

我目前正在使用c编写一个学校程序,但无法从文件中读取文本。我以前只在Java中工作过,所以我还不完全熟悉c,即使我确信它很简单,这也使我彻底陷入了困境。

这是一个如何在我们必须阅读的文件中设置文本格式的示例:

boo22 $ Book5555bOoKiNg#bOo#TeX123tEXT(JOHN)

我必须接受每个单词并将其存储在数据结构中,并且单词仅是字母字符,因此没有数字或特殊字符。我已经使数据结构正常工作,所以我只需要将每个单词放入一个char数组中,然后将其添加到我的结构中即可。它必须继续读取每个字符,直到达到非alpha字符值为止。我尝试研究从文件扫描的不同方法,但不确定哪种方法最适合我的情况。

这是我现在输入的代码:

char str[MAX_WORD_SIZE];
char c;
int index = 0;

while (fscanf(dictionaryInputFile, "%c", c) != EOF) //while not at end of file
{   
    if (isalpha(c)) //if current character is a letter
    {
        tolower(c); //ignores case in word
        str[index] = c; //add char to string
        index++;
    }
    else if (str[0] != '\0') //If a word
    {
        str[index] = '\0'; //Make sure no left over characters in String
        dictionaryRoot = insertNode(str, dictionaryRoot); //insert word to dictionary
        index = 0; //reset index
        str[index] = '\0'; //Set first character to null since word has been added
    }
}

我的想法是,如果它没有首先击中if语句,那么我必须检查str是否是单词,这就是为什么它检查str的0索引是否为null的原因。我猜我拥有的else if语句虽然不正确,但是我无法找到一种方法来结束正在构建的当前单词,然后在将str添加到我的数据结构中时将其重置为null。现在,当我运行此命令时,如果我将txt文件作为参数传递,则会遇到分段错误。

我只想知道我是否处在正确的轨道上,如果可能的话,也许应该对我应该如何读取这些数据有所帮助。

这是我第一次在这里发布信息,因此希望我提供了您需要帮助的所有内容,即使不仅仅是让我知道,我也乐于添加更多信息。

chux-恢复莫妮卡

最大的问题:的使用不正确fscanf()@BLUEPIXY

// while (fscanf(dictionaryInputFile, "%c", c) != EOF)
while (fscanf(dictionaryInputFile, "%c", &c) != EOF)

没有防止溢出的保护措施。

// str[index] = c; //add char to string
if (index >= MAX_WORD_SIZE - 1) Handle_TooManySomehow();

不知道为什么要针对'\0'何时进行测试'\0'也是非alpha的。

isalpha()就签名而言,在学上来说是有问题的char更好地传递unsigned char价值:is...((unsigned char) c))当代码知道它是不是EOF或者,使用int ch = fgetc(stream)保存输入is...(ch))

次要:比更好地size_t用于数组索引int,但要小心,因为它size_t是无符号的。与这种情况不同,size_t数组变很重要

同样,EOF接收到的任何数据都将str被忽略,即使其中包含一个单词也是如此。@BLUEPIXY。

在大多数情况下,OP处于正确的轨道上。


以下是一种未经测试的示例方法,以说明缓冲区没有溢出。

测试是否有完整的缓冲区,然后在char需要时读取如果找到非字母,则如果累积了非零长度的作品,则添加到字典中。

char str[MAX_WORD_SIZE];
int ch;
size_t index = 0;

for (;;) {
  if ((index >= sizeof str - 1) ||
      ((ch = fgetc(dictionaryInputFile)) == EOF) ||
      (!isalpha(ch))) {
    if (index > 0) {
      str[index] = '\0';
      dictionaryRoot = insertNode(str, dictionaryRoot);
      index = 0;
    }
    if (ch == EOF) break;
  }
  else {
    str[index++] = tolower(ch);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文件读取数据,仅字母字符

来自分类Dev

Logstash-仅读取文件中附加的数据

来自分类Dev

c ++仅使用字符数组[]从文件中逐字符读取字符

来自分类Dev

在Matlab中自动读取包含特殊字符的数据文件

来自分类Dev

如何只读取文件中的数据(忽略字符串)?

来自分类Dev

从文件中读取数字和字母

来自分类Dev

仅计算字符串中的字母数字字符

来自分类Dev

从txt文件读取数据仅读取最后一行

来自分类Dev

如何仅将整数从文件读取到也包含字符串的c ++程序中?

来自分类Dev

仅读取文件中每行的第一个字符

来自分类Dev

如何有效地从大txt文件中仅读取字符串

来自分类Dev

仅使用for循环从文件中检索每第5个字符,无读取行

来自分类Dev

Opencart从文件中读取数据

来自分类Dev

从C中的文件读取数据

来自分类Dev

Python:从文件中读取数据

来自分类Dev

python从文件中读取数据

来自分类Dev

从C ++文件中读取数据

来自分类Dev

PHP。读取文件的某些字符串中的某些字符以写入数据库

来自分类Dev

仅验证Laravel中的字母数字字符

来自分类Dev

提取C#中仅包含字母的字符串

来自分类Dev

从文件中仅读取一些字符串并将其存储在Java中的堆栈中

来自分类Dev

从数据提取中删除字母,仅保留数字Python

来自分类Dev

在 Pandas 数据框列中存储仅数字或字母的值?

来自分类Dev

仅计算文件特定列中的字母数字单词

来自分类Dev

按字母顺序从目录中读取 Android 文件

来自分类Dev

从数据文件中读取数据点

来自分类Dev

批量查找每行仅前10个字符(在txt文件中)的数字和字母组合的字符串,然后打印整行

来自分类Dev

vtkSTLReader仅读取执行文件夹中的文件

来自分类Dev

如何仅读取 Region 文件夹中的 Sales 文件?

Related 相关文章

  1. 1

    从文件读取数据,仅字母字符

  2. 2

    Logstash-仅读取文件中附加的数据

  3. 3

    c ++仅使用字符数组[]从文件中逐字符读取字符

  4. 4

    在Matlab中自动读取包含特殊字符的数据文件

  5. 5

    如何只读取文件中的数据(忽略字符串)?

  6. 6

    从文件中读取数字和字母

  7. 7

    仅计算字符串中的字母数字字符

  8. 8

    从txt文件读取数据仅读取最后一行

  9. 9

    如何仅将整数从文件读取到也包含字符串的c ++程序中?

  10. 10

    仅读取文件中每行的第一个字符

  11. 11

    如何有效地从大txt文件中仅读取字符串

  12. 12

    仅使用for循环从文件中检索每第5个字符,无读取行

  13. 13

    Opencart从文件中读取数据

  14. 14

    从C中的文件读取数据

  15. 15

    Python:从文件中读取数据

  16. 16

    python从文件中读取数据

  17. 17

    从C ++文件中读取数据

  18. 18

    PHP。读取文件的某些字符串中的某些字符以写入数据库

  19. 19

    仅验证Laravel中的字母数字字符

  20. 20

    提取C#中仅包含字母的字符串

  21. 21

    从文件中仅读取一些字符串并将其存储在Java中的堆栈中

  22. 22

    从数据提取中删除字母,仅保留数字Python

  23. 23

    在 Pandas 数据框列中存储仅数字或字母的值?

  24. 24

    仅计算文件特定列中的字母数字单词

  25. 25

    按字母顺序从目录中读取 Android 文件

  26. 26

    从数据文件中读取数据点

  27. 27

    批量查找每行仅前10个字符(在txt文件中)的数字和字母组合的字符串,然后打印整行

  28. 28

    vtkSTLReader仅读取执行文件夹中的文件

  29. 29

    如何仅读取 Region 文件夹中的 Sales 文件?

热门标签

归档