我有一段代码可以读取一个文本文件,并将文件中的每个单词转换为一个字符数组(需要是一个字符数组,不允许使用字符串),它是 Word 类的数据成员。当遇到标点符号时,所有 Word 对象都会作为链表存储到 Sentence 类中。遇到tab时,将之前的所有Sentences以链表的形式存储在Paragraph类中。我需要帮助的是一种在文本文件中检查“\t”的方法。我正在使用阅读
while(myFile >> charArray){
//stuff
}
因为这会读取一个完整的单词并将其存储在 charArray
中。如果它是一个句子的结尾,charArray[size]
(size 是最后一个元素)将 == '.' || ==“!” || == "?"
所以我每次都可以处理一个新的句子(我可以假设文本文件每次都会正确格式化)。我不知道该怎么做的是如何检查 '\t' 字符来创建一个新段落。 '\t' 会被 myFile >> charArray
获取吗?我试着弄乱了各种 if
语句,看看我是否可以选择一个 '\t' 字符,但我没能做到。那么如何在从文本文件读入字符数组时检查制表符呢?
最佳答案
默认情况下,
iostreams operator>>
将读取并丢弃前导空格。包括开始新段落的制表符。我建议空行也应该被视为段落分隔符。许多人在一行的开头使用一连串普通空格字符来产生缩进,而不是制表符,因此您也应该检查一下。
我的首选方法是使用 getline
读取整行文本、空格和所有内容。测试第一个字符并决定是否开始一个新段落。然后将该行加载到字符串流中并使用 operator>>
提取单个单词。这与 R Sahu 的评论非常相似......但我不会在制表符上拆分行。相反,您只关心行首的制表符/空格。
您还可以尝试使用 noskipws
和 reading individual whitespace characters
关于c++ - 如何检查 '\t' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514972/