在循环中保持

时间:2016-05-19 14:14:25

标签: c++ loops while-loop

我不知道为什么,但我的程序一直在循环中退出(内部的那个"如果"语句)

输入文件包含" 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循环它进入,做一个循环,但不留下来。我不明白为什么会这样。

1 个答案:

答案 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感到沮丧,如果表现是一个主要问题,那么也许你应该看看其他课程。我刚刚选择了一个简单的实现。