我不知道为什么,但我的程序一直在循环中退出(内部的那个"如果"语句)
输入文件包含" abc abb ca"这应该放在" abc"和" abb"到一个(stack_arr [0])堆栈和" ca"进入不同的(stack_arr [2])
fin.get(ch);
while (fin)
{
if((int)ch>=97 && (int)ch<=122)
{
x=(int)ch-97;
while(fin && (int)ch>=97 && (int)ch<=122)
{
stack_arr[x].push(ch);
fin.get(ch);
}
}
fin.get(ch);
}
但它只会把所有的&#39; a&#39;在一个堆栈中,所有&#39; b&#39;在另一个等等...我发现在内部while循环它进入,做一个循环,但不留下来。我不明白为什么会这样。
答案 0 :(得分:1)
您可以使用STL(毕竟, 在C ++中进行编程)来创建包含不同字符串的更稀疏结构,而不是您当前的方法:
std::ifstream fin("test.txt", std::ios_base::in);
std::map<char, std::vector<std::string>> stack;
std::string token;
while (getline(fin, token, ' ')) {
if (!stack.count(token[0])) {
stack[token[0]] = {};
}
stack[token[0]].push_back(token);
}
fin.close();
// Print the contents
for (auto& e : stack) {
std::cout << "key = " << e.first << "\n";
for (auto& s : e.second) {
std::cout << s << "\n";
}
}
如果我在test.txt中执行以下操作:
abc abb ca
ccb kw
我得到以下输出:
key = a
ABC
ABB
key = c
CA
建行
key = k
千瓦
有些人可能对使用std::map
感到沮丧,如果表现是一个主要问题,那么也许你应该看看其他课程。我刚刚选择了一个简单的实现。