【发布时间】:2017-08-21 13:10:46
【问题描述】:
现在看第 2 行,Cow-DNA 序列;这在第 13 行和第 24 行继续,并且......我想为每个序列获取这个长序列,忽略中间的空白和新行。
这是文件的格式:1
这是代码,它只读取前 10 个序列
ifstream file ("txt");
string line;
vector <string> vec;
stringstream s;
string name;
string strip(string & s)
{
size_t b = s.find_first_not_of(' ');
size_t e = s.find_last_not_of(' ');
if (b == string::npos) {
return "";
} else {
return s.substr(b, e - b + 1);
}
}
void getSequence(){
int i;
int row;
int col;
if (file.is_open())
{
file >> row >> col;
for (i = 0; i < row; i++) {
vec.push_back("");
}
i = 0;
while (getline(file, line))
{
file >> name;
if (line == " ")
{
continue;
}
vec[i % row] += strip(line);
i++;
}
}
else {
cerr << "Error: file did not open!" << endl;
}
for (const string & v : vec) {
cout << v << endl;
}
}
提前感谢您的帮助。
【问题讨论】:
-
您可以使用
vector.resize(row)代替循环,getline会按照它说的做,它会读取整行。紧随其后的是file >> name;不是您所需要的。我不确定第 2-11 行如何对应 13+ 或您要如何处理该数据。 -
这样持续了多少行?没有足够的格式信息需要了解。
-
请查看链接。应该让您更好地了解格式。这就是我正在使用的文件。
file >> name;存储每个序列的名称。 -
你需要描述一下。上面有名字的行是我想的一个序列的开始。剩下的线是干什么用的?大块都是一个序列吗?大块的每一行是否对应于命名的行?你想要第 2 + 13 + 24 + 35 + ... 行吗?
-
所以取第二个序列块,把它放在第一个序列块的末尾,第三个序列块放在第二个块的末尾,依此类推。我希望每个块在最后合并每个块,这变成了 10 行和 705 列的长多个序列。
标签: c++ c++11 ifstream removing-whitespace