如何删除句子中的所有标点符号
How to remove all punctuation marks from a sentence?
我是C++新手,正在尝试解决初学者试图从句子中删除所有标点符号的问题。下面是我想出的代码。但是,当我输入"你好!Hello!",编译器输出"Hello"而不是"Hello Hello"(这是我所期望的)。
为什么会这样?
#include <iostream>
#include <string>
using namespace std;
int main(){
cout << "please enter a sentence which include one or more punctuation marks" << endl;
string userInput;
string result;
cin >> userInput;
decltype(userInput.size()) n;
for (n = 0; n < userInput.size(); n++){
if(!ispunct(userInput[n])){
result += userInput[n];
cout << result << endl;
}
}
return 0;
}
输入:
Hello! Hello!
编译器输出:
Hello
当你执行cin >> userInput
时,它只读取输入流中的第一个空格字符。
您可能希望改用std::getline
(默认情况下,它将读取整行)。
尝试使用 getline()
函数。在此处阅读有关它的信息。
欢迎来到C++!阅读有关字符串流的信息,他们非常擅长操作字符串
正如其他人已经说过的,你使用getline
来阅读一整行文本。
我还想指出,<algorithm>
中的一些功能可以使这种事情更加干净。 您可以使用 std::remove_if
而不是循环字符串。
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string line;
while( std::getline( std::cin, line ) )
{
line.erase( std::remove_if( line.begin(), line.end(), ispunct ), line.end() );
std::cout << line << std::endl;
}
return 0;
}
相关文章:
- 如何删除peer if else分支中的冗长句子
- C++中的标点符号是什么
- 在输入句子时终止 std::out_of_range
- 使用 C++ 验证 NMEA 句子
- 分析包含 NMEA 句子的日志文件C++
- 如何通过 scanf() 读取没有标点符号的字符串?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- Vscode/C++ - cout 无法输出完整的句子,也无法与整数连接
- 如何理解句子的生命周期始于对e的评估
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- C++在标点符号后将字符串换行
- C++从句子中删除给定字符的程序不起作用
- 如何让正则表达式匹配句子中间?
- 如何获取句子中单词的第一个字母*没有*指针,引用等
- 为什么函数的返回类型与实际句子不一致?
- 如何将时间和日期转换为 C 或 C++ 的句子格式?
- 引用 using 声明引入的功能的句子是什么意思?
- C++ 如何从句子中读取和存储值
- Flex Lexer 模式匹配句子分隔符/标点符号作为 URL 路径部分
- 如何删除句子中的所有标点符号