C++ stringstream 类的 10 种高级用法
stringstream 类是 C++ 标准库中的一个非常有用的类,它可以帮助我们在字符串和其他数据类型之间进行转换。下面是一些关于 stringstream 类的高级用法。
1. 将字符串转换为其他数据类型
我们可以使用 stringstream 类将字符串转换为其他数据类型,例如 int、double 等。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string str = "12345";
std::stringstream ss(str);
int num;
ss >> num;
std::cout << num << std::endl; // 输出 12345
return 0;
}
2. 将其他数据类型转换为字符串
我们也可以使用 stringstream 类将其他数据类型转换为字符串。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
int num = 12345;
std::stringstream ss;
ss << num;
std::string str = ss.str();
std::cout << str << std::endl; // 输出 "12345"
return 0;
}
3. 分割字符串
我们可以使用 stringstream 类来分割字符串。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string str = "one two three four";
std::stringstream ss(str);
std::string word;
while (ss >> word) {
std::cout << word << std::endl;
}
return 0;
}
4. 连接多个字符串
我们可以使用 stringstream 类来连接多个字符串。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::stringstream ss;
ss << "one" << " two" << " three" << " four";
std::string str = ss.str();
std::cout << str << std::endl; // 输出 "one two three four"
return 0;
}
5. 格式化输出
我们可以使用 stringstream 类来格式化输出。下面是一个例子:
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
int main() {
double pi = 3.14159265358979323846;
std::stringstream ss;
ss << std::fixed << std::setprecision(2) << pi;
std::string str = ss.str();
std::cout << str << std::endl; // 输出 "3.14"
return 0;
}
6. 清空 stringstream 对象
我们可以使用 str("")
函数来清空 stringstream 对象中的内容。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
int num = 12345;
std::stringstream ss;
ss << num;
// 清空 stringstream 对象
ss.str("");
double pi = 3.14159;
ss << pi;
std::string str = ss.str();
// 输出 "3.14159"
// 如果没有清空 stringstream 对象,则输出 "123453.14159"
std::cout << str << std::endl;
return 0;
}
7. 检查 stringstream 对象是否为空
我们可以使用 str().empty()
函数来检查 stringstream 对象是否为空。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
int num = 12345;
std::stringstream ss;
if (ss.str().empty()) {
std::cout << "Empty" << std::endl; // 输出 "Empty"
}
ss << num;
if (!ss.str().empty()) {
std::cout << "Not empty" << std::endl; // 输出 "Not empty"
}
return 0;
}
8. 使用 getline 函数读取一整行
我们可以使用 getline
函数从 stringstream 对象中读取一整行。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string str = "one\ntwo\nthree\nfour";
std::stringstream ss(str);
std::string line;
while (std::getline(ss, line)) {
std::cout << line << std::endl;
}
return 0;
}
9. 使用 peek 函数查看下一个字符
我们可以使用 peek
函数查看 stringstream 对象中的下一个字符,而不会改变 stringstream 对象的状态。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string str = "12345";
std::stringstream ss(str);
char ch = ss.peek();
std::cout << ch << std::endl; // 输出 '1'
int num;
ss >> num;
std::cout << num << std::endl; // 输出 12345
return 0;
}
10. 使用 putback 函数将字符放回 stringstream 对象
我们可以使用 putback
函数将字符放回 stringstream 对象中。下面是一个例子:
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string str = "12345";
std::stringstream ss(str);
char ch;
ss.get(ch);
// 将字符 '1' 放回 stringstream 对象中
ss.putback(ch);
int num;
ss >> num;
// 输出 12345
// 如果没有使用 putback 函数,则输出 2345
std::cout << num << std::endl;
return 0;
}
以上就是关于 C++ stringstream 类的 10 种高级用法。希望对您有所帮助。