如何在C++中读取一行输入并去除尾随空格?
时间: 2024-09-08 20:01:04 浏览: 65
在C++中读取一行输入并去除尾随空格可以通过使用标准输入流`std::cin`和字符串处理函数来实现。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string input;
std::getline(std::cin, input); // 使用getline函数读取一行输入
input.erase(std::find_if(input.rbegin(), input.rend(), [](unsigned char ch) {
return !std::isspace(ch);
}).base(), input.end()); // 去除尾随空格
std::cout << "处理后的输入: " << input << std::endl;
return 0;
}
```
这段代码首先使用`std::getline`函数读取一行输入,然后使用`std::find_if`结合`std::isspace`函数找到第一个非空白字符的反向迭代器,并将其转换为正向迭代器,最后使用`std::string::erase`方法删除尾随空格。
相关问题
c++一行一行读取TXT中用逗号隔开的整数和浮点数怎么办
在C++中,你可以使用文件流(fstream)逐行读取TXT文件,并利用getline()函数获取每一行的内容,然后使用`std::stringstream`或者直接处理字符串来解析逗号分隔的数值。这里是一个简单的示例:
```cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
std::vector<std::tuple<int, float>> read_csv(const std::string& filename) {
std::ifstream file(filename);
if (!file.is_open()) {
throw std::runtime_error("Failed to open the file");
}
std::vector<std::tuple<int, float>> data;
std::string line;
while (std::getline(file, line)) {
std::istringstream iss(line);
int int_val;
float float_val;
if (!(iss >> int_val >> std::ws >> float_val)) { // ws忽略空格,防止因前导或尾随空格导致解析错误
std::cerr << "Invalid value in line: " << line << '\n';
continue;
}
data.push_back(std::make_tuple(int_val, float_val));
}
return data;
}
int main() {
try {
auto numbers = read_csv("your_file.txt");
for (const auto &num : numbers) {
int int_num = std::get<0>(num); // 第一个元素
float float_num = std::get<1>(num); // 第二个元素
std::cout << "Int: " << int_num << ", Float: " << float_num << "\n";
}
} catch (const std::exception &e) {
std::cerr << e.what() << '\n';
}
return 0;
}
```
这个程序会将每个含有逗号分隔整数和浮点数的行转换成一个元组添加到向量中。如果某行数据不符合预期格式,程序会跳过该行并打印一条错误信息。
阅读全文