我在文本文件中有以下列表:
ABCD
1234
3456
ABCD
5678
7890
ABCD
4567
我的代码必须通过文本文件,每次看到字符串" ABCD"时,我必须将字符串后面的4位数条目存储到链接中名单。我得到了一切工作,但我遇到问题的唯一部分代码是将条目分成单独的链表。
例如,1234
和3456
必须放入列表1,5678
和7890
必须放入列表2,4567
必须将其列入清单3.我已经编写了用于分隔这些条目并将它们放入适当列表的循环的问题。
以下是我的代码部分:
//I have all elements stored initially into a string vector named "words".
int counter = 0;
for (int i = 0; i < words.size(); i++) { //loop through entire vector
string check = words[i];
if (isdigit(check[0])) { //check if first character is a digit
numbers = words[i];
num = stoi(numbers); //4 digit number converted back to integer
if (counter == 1) {
list1.Add(num); //Add is a function of type linked list
}
if (counter == 2) {
list2.Add(num);
}
if (counter == 3) {
list3.Add(num);
}
}
else { //if its not a digit
counter = counter + 1; //increase the counter
}
}
这是我得到的输出:
1234
第一个条目添加到任何列表后没有其他内容。有人能帮我弄清楚我哪里出错吗?
答案 0 :(得分:1)
您发布的代码没有问题,因此问题必须是读取文件或列表类。这是一个有效的例子:
#include<iostream>
#include<string>
#include<vector>
#include<list>
int main()
{
std::vector<std::string> words = {
"ABCD", "1234", "3456", "ABCD", "5678", "7890", "ABCD", "4567" };
std::list<int> list1, list2, list3;
int counter = 0;
for (auto word : words)
{
if (isdigit(word[0]))
{
int num = std::stoi(word);
if (counter == 1) list1.push_back(num);
if (counter == 2) list2.push_back(num);
if (counter == 3) list3.push_back(num);
}
else
{
counter++;
}
}
for (auto n : list1) std::cout << n << "\n";
for (auto n : list2) std::cout << n << "\n";
for (auto n : list3) std::cout << n << "\n";
return 0;
}