[C++] 讀取整行 & 讀取整行的數字

讀取整行的內容

首先要確保有這兩個 header

#include <string>
#include <iostream>

std::getline() 來讀取整行,
第一個參數表示從哪裡讀入 (istream),
第二個參數表示輸出的地方 (string)。

std::string line;
std::getline(std::cin, line);

完成!

完整的示範

#include <string>
#include <iostream>

int main()
{
  std::string line;
  
  std::getline(std::cin, line);
  
  std::cout << line << std::endl;
  
  return 0;
}

如果直接使用 std::cin >> line 的話,
遇到空格就會被當作結束了,

#include <string>
#include <iostream>

int main()
{
  std::string line;
  
  std::cin >> line;
  
  std::cout << line << std::endl;
  
  return 0;
}

可以試試有空個的 input

123 456 789

第一個程式會輸出

123 456 789

第二個只會輸出

123

讀取整行的數字

stringstream 的用法和 std::cin & std::cout 相同,
stringstream 讀取就用 >>
輸入用 <<

#include <string>
#include <sstream>
#include <iostream>
#include <vector>

int main()
{
  std::string line;
  std::stringstream buffer;
  std::vector<int> v;
  int temp;
  
  std::getline(std::cin, line);
  buffer.str(line);
  
  while (buffer >> temp) v.push_back(temp);
  
  // reversed const iterator
  for (auto iter = v.crbegin(); iter != v.crend(); ++iter)
    std::cout << *iter << " ";
  std::cout << std::endl;
  
  return 0;
}

input

1 2 3 4 5 6
7 8 9

output

6 5 4 3 2 1

讀取直到 EOF

倒序輸出輸入的數

#include <string>
#include <sstream>
#include <iostream>
#include <vector>

int main()
{
  std::string line;
  std::stringstream buffer;
  std::vector<int> v;
  int temp;
  
  while (std::getline(std::cin, line))
  {
    buffer.clear();
    buffer.str(line);

    v.clear();
    while (buffer >> temp) v.push_back(temp);

    // reversed const iterator
    for (auto iter = v.crbegin(); iter != v.crend(); ++iter)
      std::cout << *iter << " ";
    std::cout << std::endl;
  }
  
  return 0;
}

input

1 2 3 4 5
6 7 8
9 10

output

5 4 3 2 1
8 7 6
10 9
Show Comments