如何删除句子中的所有标点符号?
How to remove all punctuation marks from a sentence?
我是 C++ 的新手,正在尝试解决初学者试图从句子中删除所有标点符号的问题。下面是我想出的代码。但是,当我输入 "Hello! 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
时,它只会读取输入流中的第一个白色 space 字符。
您可能想改用 std::getline
(默认情况下它会读取整行)。
尝试使用 getline()
函数。了解它 here。
欢迎使用 C++!了解 stringstreams 他们非常擅长操纵字符串
正如其他人所说,您使用 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;
}
我是 C++ 的新手,正在尝试解决初学者试图从句子中删除所有标点符号的问题。下面是我想出的代码。但是,当我输入 "Hello! 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
时,它只会读取输入流中的第一个白色 space 字符。
您可能想改用 std::getline
(默认情况下它会读取整行)。
尝试使用 getline()
函数。了解它 here。
欢迎使用 C++!了解 stringstreams 他们非常擅长操纵字符串
正如其他人所说,您使用 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;
}