C ++如何从字符串数组中删除标点符号?
C++ how to remove puncuation from a string array?
在下面显示的程序中,我尝试使用 ispunct
从字符串数组中删除所有标点符号
std::string fileName;
std::fstream readFile;
const int arraySize = 50000;
std::string storeFile[arraySize];
int main(int argc, char *argv[]){
for (int i = 0, len = storeFile[i].size(); i < len; i++) {
if (ispunct(storeFile[i])){//check whether parsing character is punctuation or not
storeFile[i].erase(std::remove_if(storeFile[i].begin(),
storeFile[i].end(),
::ispunct), storeFile[i].end());
}
}
}
但是我在 ispunct(storeFile[i]
上收到以下错误
function "ispunct" cannot be called with the given argument list -- argument types are: (std::string)
我之前对 std::string 使用过 ispunct 但不是 std::string 数组[]。如何从字符串数组中删除标点符号和白色 space?谢谢
for (int i = 0; i < arraySize; i++)
{
while (readFile >> storeFile[i])
{
std::transform(storeFile[i].begin(), storeFile[i].end(), storeFile[i].begin(), ::tolower);
for (auto &s : storeFile)
{
s.erase(std::remove_if(s.begin(), s.end(), ::ispunct), s.end());
s.erase(std::remove_if(s.begin(), s.end(), ::isspace), s.end());
}
}
}
ispunct
将 1 个字符作为输入,而不是整个字符串。
但是您不需要在删除标点符号之前检查字符串。像这样简单的东西会起作用:
for (auto& s : storeFile) {
s.erase(std::remove_if(s.begin(), s.end(), ::ispunct), s.end());
}
==编辑==
您有一个包含 50000 个字符串的固定数组。如果输入文件包含 N 个字符串,您将打印后跟 50000-N 空行。这可能不是你想要的。请改用 std::vector<std::string>
。
std::string s;
std::vector<std::string> storeFile;
while (readFile >> s) {
std::transform(s.begin(), s.end(), s.begin(), ::tolower);
s.erase(std::remove_if(s.begin(), s.end(), ::ispunct), s.end());
s.erase(std::remove_if(s.begin(), s.end(), ::isspace), s.end());
storeFile.push_back(std::move(s));
}
对于C++20,其实只有一行代码:
假设你有一个字符串 str
:
std::erase_if(vec, ispunct);
在下面显示的程序中,我尝试使用 ispunct
从字符串数组中删除所有标点符号std::string fileName;
std::fstream readFile;
const int arraySize = 50000;
std::string storeFile[arraySize];
int main(int argc, char *argv[]){
for (int i = 0, len = storeFile[i].size(); i < len; i++) {
if (ispunct(storeFile[i])){//check whether parsing character is punctuation or not
storeFile[i].erase(std::remove_if(storeFile[i].begin(),
storeFile[i].end(),
::ispunct), storeFile[i].end());
}
}
}
但是我在 ispunct(storeFile[i]
function "ispunct" cannot be called with the given argument list -- argument types are: (std::string)
我之前对 std::string 使用过 ispunct 但不是 std::string 数组[]。如何从字符串数组中删除标点符号和白色 space?谢谢
for (int i = 0; i < arraySize; i++)
{
while (readFile >> storeFile[i])
{
std::transform(storeFile[i].begin(), storeFile[i].end(), storeFile[i].begin(), ::tolower);
for (auto &s : storeFile)
{
s.erase(std::remove_if(s.begin(), s.end(), ::ispunct), s.end());
s.erase(std::remove_if(s.begin(), s.end(), ::isspace), s.end());
}
}
}
ispunct
将 1 个字符作为输入,而不是整个字符串。
但是您不需要在删除标点符号之前检查字符串。像这样简单的东西会起作用:
for (auto& s : storeFile) {
s.erase(std::remove_if(s.begin(), s.end(), ::ispunct), s.end());
}
==编辑==
您有一个包含 50000 个字符串的固定数组。如果输入文件包含 N 个字符串,您将打印后跟 50000-N 空行。这可能不是你想要的。请改用 std::vector<std::string>
。
std::string s;
std::vector<std::string> storeFile;
while (readFile >> s) {
std::transform(s.begin(), s.end(), s.begin(), ::tolower);
s.erase(std::remove_if(s.begin(), s.end(), ::ispunct), s.end());
s.erase(std::remove_if(s.begin(), s.end(), ::isspace), s.end());
storeFile.push_back(std::move(s));
}
对于C++20,其实只有一行代码:
假设你有一个字符串 str
:
std::erase_if(vec, ispunct);