如何在C++中提取换行符\n之前的字符串?
C++提取换行符前的字符串内容
给你两种简单靠谱的实现方式:
方法一:使用string的find和substr成员函数
这是最直接的原生字符串操作方式,不需要额外依赖流类:
#include <string> #include <iostream> int main() { std::string s = "Hello Hi Hey\nBye Bye good night"; // 查找第一个换行符的位置 size_t newline_pos = s.find('\n'); std::string result; if (newline_pos != std::string::npos) { // 截取从开头到换行符之前的子串 result = s.substr(0, newline_pos); } else { // 如果字符串里没有换行符,直接取整个字符串 result = s; } std::cout << result << std::endl; // 输出:Hello Hi Hey return 0; }
find('\n')会返回换行符第一次出现的索引,如果没找到换行符就返回std::string::npos,这时候直接返回原串即可。
方法二:用stringstream配合getline
你之前觉得stringstream不行是因为用了默认的空格分割读取(比如iss >> result),但换用std::getline就能完美解决:
#include <string> #include <sstream> #include <iostream> int main() { std::string s = "Hello Hi Hey\nBye Bye good night"; std::istringstream iss(s); std::string result; // getline默认以换行符为分隔符,会读取到换行前的所有内容(包括空格) std::getline(iss, result); std::cout << result << std::endl; // 输出:Hello Hi Hey return 0; }
std::getline会从字符串流中读取字符,直到遇到换行符为止,并且不会包含换行符本身,完美保留空格。
内容的提问来源于stack exchange,提问作者PHANTOM DRAGON
相关产品推荐
相关产品推荐

