所以這看起來像一個這樣簡單的問題,但我正在努力。我有一個大文件,我只想通過並將文件中的每個字符都放入char數組中。我的問題是我不知道如何處理新行和任何空格。有沒有辦法通過文件並抓住所有的字符,跳過換行符,並把它們放在一個數組中?C++:抓取文件中的每個字符忽略換行符和空格
是的,我在谷歌搜索周圍,但沒有運氣。
所以這看起來像一個這樣簡單的問題,但我正在努力。我有一個大文件,我只想通過並將文件中的每個字符都放入char數組中。我的問題是我不知道如何處理新行和任何空格。有沒有辦法通過文件並抓住所有的字符,跳過換行符,並把它們放在一個數組中?C++:抓取文件中的每個字符忽略換行符和空格
是的,我在谷歌搜索周圍,但沒有運氣。
這是如何在C
中輕鬆完成的。我相信它也可以使用C++
接口完成,但C庫也是C++的一部分。
#include <stdio.h>
#include <ctype.h>
FILE *f = fopen ("filename", "r");
if (!f)
error ...
char array [BIGENOUGH];
int index = 0;
while (!feof (f))
{
char c = fgetc (f);
if (!isspace (c))
array [index++] = c;
}
fclose (f):
我認爲你需要刪除EOF,這是在數組的末尾 – 2012-04-19 18:24:32
這工作完美。非常感謝你。我正在嘗試使用fstream庫。這很容易。 – LiverpoolFTW 2012-04-19 18:25:28
首選的方法是使用標準庫字符串。從字符串中刪除空格的示例here。如何從一行文件逐行讀取here。
示例代碼:
fstream file;
file.open("test.txt",ios::in);
while (!file.eof()) {
string str;
file >> str;
remove_if(str.begin(), str.end(), isspace);
str.erase(remove_if(str.begin(), str.end(), isspace), str.end());
//save str here
}
file.close();
remove_if
示例實現:
template<typename T, typename P>
T remove_if(T beg, T end, P pred)
{
T dest = beg;
for (T itr = beg;itr != end; ++itr)
if (!pred(*itr))
*(dest++) = *itr;
return dest;
}
此代碼是未經測試。
fgets
允許您閱讀直到換行(注意換行符仍然存在於目標緩衝區中,因此請確保使用'\ 0'覆蓋它)。
逐行讀取文件,每次將輸出與前一個輸出連接起來。
在C++中執行所需操作的關鍵是利用格式化的輸入操作。你想忽略空白;格式化的輸入法就是這樣做的。
這裏有一種方法,採用規範的C++輸入環:
#include <fstream>
#include <iostream>
int main() {
std::ifstream inFile("input.txt");
char c;
std::string result;
while(inFile >> c)
result.push_back(c);
std::cout << result;
}
我寧願標準算法,以手工製作環路。以下是使用std::copy
在C++中執行此操作的一種方法。請注意,這種方式和第一種方式幾乎完全相同。
#include <vector>
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>
int main() {
std::ifstream inFile("input.txt");
std::string result;
std::copy(std::istream_iterator<char>(inFile),
std::istream_iterator<char>(),
std::back_inserter(result));
std::cout << result;
}
另一種方式,這次與std::accumulate
。 std::accumulate
使用operator+
而不是push_back
,所以我們可以一次讀取string
中的文件。
#include <vector>
#include <fstream>
#include <numeric>
#include <iostream>
#include <iterator>
#include <algorithm>
int main() {
std::ifstream inFile("input.txt");
std::string result =
std::accumulate(
std::istream_iterator<std::string>(inFile),
std::istream_iterator<std::string>(),
std::string());
std::cout << result;
}
閱讀基因組中,我猜? – cmo 2012-04-19 18:23:49