我有一个读取文本文件的代码,并将文件中的每个单词转换为字符数组(需要是字符数组,不允许字符串),这是Word类的数据成员。遇到标点符号时,所有Word对象都作为链表存储在Sentence类中。遇到标签时,之前的所有句子都作为链表存储在Paragraph类中。我需要帮助的是一种在文本文件中检查'\ t'的方法。我正在阅读
while(myFile >> charArray){
//stuff
}
因为它读出一个完整的单词并将其存储在charArray
中。如果它是一个句子的结尾,charArray[size]
(大小是最后一个元素)将== '.' || == "!" || == "?"
所以我可以处理每次创建一个新句子(我可以假设文本文件每次都会被正确格式化)。我不知道该怎么做是如何检查'\ t'字符来创建一个新段落。 '{1}}会不会被接听?我尝试弄乱各种myFile >> charArray
语句,看看我是否可以选择一个'\ t'字符,但我无法做到。那么如何在从文本文件读入字符数组时检查选项卡?
答案 0 :(得分:1)
默认情况下,iostream operator>>
将读取并丢弃前导空格。包括开始新段落的制表符。我建议一个空行也应该被认为是一个段落分隔符。许多人在一行开头使用一系列普通空格字符来产生缩进,而不是制表符,所以你也应该检查它。
我首选的方法是使用getline
来读取整行文本,空白和所有内容。测试第一个字符并决定是否开始一个新段落。然后将该行加载到字符串流中,并使用operator>>
提取单个单词。这与R Sahu的评论非常相似......但我不会在标签字符上拆分。相反,你只关心一行开头的标签/空格。
您还可以试用noskipws
和reading individual whitespace characters
答案 1 :(得分:0)
这可能会帮助您/成为您的目标:
http://www.cplusplus.com/reference/cstring/strchr/
您对C ++提供的重载感兴趣:
char * strchr(char * str,int character);
这将返回指向字符第一次出现的指针,如果找不到则返回空指针。
使用示例(由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;
}