std::stringstream
是 C++ 標準庫中的一個類,用于處理字符串流
std::stringstream
對象時,可以使用 fail()
、bad()
和 eof()
方法來檢查流的狀態。例如:#include<iostream>
#include <sstream>
#include<string>
int main() {
std::stringstream ss;
int value;
ss << "Not a number";
ss >> value;
if (ss.fail()) {
std::cerr << "Failed to read an integer from the stream."<< std::endl;
}
return 0;
}
std::stringstream
對象,可以使用 clear()
方法清除流的狀態。例如:#include<iostream>
#include <sstream>
#include<string>
int main() {
std::stringstream ss;
int value;
ss << "Not a number";
ss >> value;
if (ss.fail()) {
std::cerr << "Failed to read an integer from the stream."<< std::endl;
ss.clear(); // Clear the error state
ss.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Ignore the rest of the input
ss.str(""); // Clear the contents of the stream
}
// Now the stringstream is ready for new input
ss << "42";
ss >> value;
std::cout << "Read value: "<< value<< std::endl;
return 0;
}
std::stringstream
不會拋出異常,但你可以設置流的異常掩碼,以便在特定條件下拋出異常。例如:#include<iostream>
#include <sstream>
#include<string>
int main() {
std::stringstream ss;
int value;
ss.exceptions(std::ios::failbit | std::ios::badbit); // Enable exceptions for failbit and badbit
try {
ss << "Not a number";
ss >> value;
} catch (const std::ios_base::failure& e) {
std::cerr << "An exception occurred: " << e.what()<< std::endl;
}
return 0;
}
請注意,std::stringstream
不會因為遇到無效輸入而拋出異常,除非你顯式地設置了異常掩碼。在大多數情況下,檢查流的狀態并根據需要清除錯誤狀態是更好的做法。