如何从.txt文件读取空白行到char数组

时间:2016-02-17 23:42:26

标签: c++ arrays file char blank-line

在我的程序中,我应该逐行阅读文本文件并搜索最长的回文并返回其行号。

每个文本文件长度为100,000行,最大长度为15。

使用我的代码,我能够将每行读入

char lines[100000][15]

除了空白线以外,我的计算哪条线包含最长的回文。

例如,包含以下内容的文件:(0:是第0行,第1行:第1行,等等)

0: hello
1: bob
2: joe
3: 
4: cat

出现:

0: hello
1: bob
2: joe
3: cat
4: (whatever 5: would be)

这是我阅读文件的代码:

std::ifstream theFile;
theFile.open(argv[1]);

char lines[100000][15];
for (int i = 0; i < 100000; i++)
{
    for (int j = 0; j < 15; j++)
    {
        lines[i][j] = '\0'; //I do this to initialize each char to null
    }
}

while (!theFile.eof())
{
    for (int i = 0; i < 100000; i++)
    {
        theFile >> lines[i];
    }
}

我假设问题在于:

theFile >> lines[i];

不要复制换行符或其他格式字符,但我不知道如何解决这个问题,所以任何帮助都会受到赞赏。

我必须使用一个char数组数组,顺便说一句,因为我使用MPI传递数据,我只能发送字符而不是数组/字符串。

4 个答案:

答案 0 :(得分:1)

尝试使用getline函数(并修复循环),如下所示

 for (int i = 0; theFile.getline ( lines[i],14) && i < 100000; i++)
    ;

答案 1 :(得分:0)

getline有一个版本,您可以在其中指定分隔符。当遇到新行时,默认版本会突然出现,所以不要使用它。

答案 2 :(得分:0)

您不需要将所有字符串保留在内存中。一次只读一行。如果该线是回文并且它比您迄今为止看到的最长的线长,则存储它的长度和线号。然后碰撞线计数器。像这样:

long line_number = 0;
int longest_length = -1;
long longest_number = -1;
std::string line;
while (theFile.getline(line)) {
    if (is_palindrome(line) && longest_length < line.length()) {
        longest_length = line.length();
        longest_line = line_number;
    }
    ++line_number;
}

答案 3 :(得分:0)

我放弃了尝试将它们直接放入char数组的数组中。我改为使用getline和vector。

std :: ifstream theFile;     theFile.open(的argv [1]);

std::vector<std::string> Lines;
std::string workString;
while(std::getline(theFile,workString))
{
    Lines.push_back(workString);
    workString.clear();
}
theFile.close();

char lines[100000][15];
for (int i = 0; i < 100000; i++)
{
    for (int j = 0; j < 15; j++)
    {
        lines[i][j] = '\0';
    }
}


for (int i = 0; i < 100000; i++)
{
    for (int j = 0; j < Lines[i].size(); j++)
    {
        lines[i][j] = Lines[i][j];
    }
}