0

我有一个读取文本文件的代码,并将文件中的每个单词转换为字符数组(需要是字符数组,不允许使用字符串),它是 Word 类的数据成员。当遇到标点符号时,所有 Word 对象都作为链表存储到 Sentence 类中。当遇到选项卡时,之前的所有 Sentences 都作为链表存储在 Paragraph 类中。我需要帮助的是一种在文本文件中检查 '\t' 的方法。我正在阅读使用

while(myFile >> charArray){
//stuff
}

因为这会读入一个完整的单词并将其存储在charArray. 如果它是句子的结尾,charArray[size](大小是最后一个元素)== '.' || == "!" || == "?",我可以每次都处理一个新的句子(我可以假设文本文件每次都会正确格式化)。我不知道该怎么做是如何检查 '\t' 字符来创建一个新段落。'\t' 会被 接走myFile >> charArray吗?我试着弄乱各种if语句,看看我是否可以拿起一个 '\t' 字符,但我做不到。那么如何在从文本文件读入字符数组时检查选项卡?

4

2 回答 2

1

operator>>默认情况下,iostreams将读取并丢弃前导空格。包括开始新段落的制表符。我建议空行也应该被视为段落分隔符。许多人在行首使用一系列普通空格字符来产生缩进,而不是制表符,所以你也应该检查一下。

我首选的方法是getline阅读整行文本、空白和所有内容。测试第一个字符并决定是否开始一个新段落。然后将该行加载到字符串流中并用于operator>>提取单个单词。这与 R Sahu 的评论非常相似……但我不会在制表符上拆分行。相反,您只关心行首的制表符/空格。

您还可以试验noskipws阅读单个空白字符

于 2014-10-22T20:08:10.630 回答
0

这可能会帮助您/成为您正在寻找的东西:

http://www.cplusplus.com/reference/cstring/strchr/

您对 C++ 提供的重载感兴趣:

char * strchr (char * str, int 字符);

这将返回一个指向字符第一次出现的指针,或者,如果未找到,则返回一个空指针。

可以在此处找到使用示例(也由 Cplusplus.com 提供):

/* strchr example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] = "This is a sample string";
  char * pch;
  printf ("Looking for the 's' character in \"%s\"...\n",str);
  pch=strchr(str,'s');
  while (pch!=NULL)
  {
    printf ("found at %d\n",pch-str+1);
    pch=strchr(pch+1,'s');
  }
  return 0;
}    
于 2014-10-22T19:04:23.970 回答