我有这个代码,我想从文本文件中读取行并从该行中查找唯一代码。这是我的文本文件的一些内容:
AGU UAC AUU GCG CGA UGG GCC UCG AGA CCC GGG UUU AAA GUA GGU GA
UUA CAU UGC GCG M GGC CUC GAG ACC CGG GUU UAA AGU AGG UGAGUU ACA UUG CGC GAU GGG CCU CGA GAC CCG GGU UUA AAG UAG GUG A
UGG M AAA UUU GGG CCC AGA GCU CCG GGU AGC GCG UUA CAU UGA
我想找到包含字母'M'
的行并使它们成为单独的字符串,以便我可以将它们分解得更多并进行比较。我虽然有点麻烦。
我试图找到它们并将其分配给字符串,但它似乎将所有行分配给相同的字符串。这就是我到目前为止所做的:
ifstream code_File ("example.txt"); // open text file.
if (code_File.is_open()) {
while (code_File.good()) {
getline(code_File,line); //get the contents of file
cout << line << endl; // output contents of file on screen.
found = line.find_first_of('M', 0); // Finding start code
if (found != string::npos) {
code_Assign.assign(line, int(found), 100);
/* assign the line to code_Assign and print out string from where I
found the start code 'M'. */
cout << endl << "code_Assign: " << code_Assign << endl << endl;
ED:我应该使用字符串替换而不是分配吗?
答案 0 :(得分:2)
每次迭代都会重写code_Assign
。 code_Assign.assign(line, int(found), 100);
为字符串分配来自line
的新内容,之前的内容将丢失。使用replace也不会。您需要在某处存储字符串,最简单的方法是使用vector
。
你声明一个空字符串向量,如下所示:
std::vector<std::string> my_vector_of_strings;
与普通数组不同,vector在向其添加元素时会动态调整自身大小,因此您无需知道在编译时需要多大。更多信息:vector reference。
接下来,
while (code_File.good()) {
getline(code_File,line);
是糟糕的形式,之前已经多次解释过SO(here,例如)。
在getline()
条件下移动while
来电。您的代码应如下所示:
// untested
ifstream code_File ("example.txt"); // open text file.
vector<string> vec_str; // declare an empty vector of strings
string line;
if (code_File.is_open())
while (getline(code_File, line)) { // read a line and only enter the loop if it succeeds
size_t found = line.find_first_of('M'); // you can omit the second parameter, it defaults to 0
if (found != string::npos) {
line = line.substr(found); // take a substring from where we found 'M' to the end
vec_str.push_back(line); // add the line to the vector
}
}
// print out the lines in vector:
for (size_t i = 0; i < vec_str.size(); i++)
cout << vec_str[i] << endl;
// or, prettier, using the new c++11's range based for:
for (string s& : vec_str) cout << s << endl;
希望有所帮助。