-1

在使用 c++ 执行此操作时,我们可以扫描从第一个字符到 strlen(text)-1 的整个内容,并检查逗号和标点符号。如果找到 char,那么我们可以将其替换为“space”或任何其他 char。

for(i=0;i<str.strlen();i++)
{
    if(ch[i] == ',' or [other])  //assume I have copied content of str in ch[]
       ch[i]=' ';
}

但是是否有任何提供此功能的 C++ 函数或类?

我正在处理字符串、unordered_map、isstringstream、向量。每个都有自己的功能。但是有没有人可以用于我的上述目的?或者是其他东西?

4

5 回答 5

8

您可以使用std::replacestd::replace_if

std::replace(s.begin(), s.end(), ',' , ' ');
std::replace_if(s.begin(), s.end(), [](char c){return c == ','; }, ' ');

查看实时样本

对于 C++03,可以这样做:

#include <cctype>   
struct IsComma
{
    bool operator()(char c) const
    {
        return (bool)std::ispunct(c);  //!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ as punctuation
    }
};

std::replace_if(s.begin(), s.end(), IsComma(), ' ');

也不要忘记阅读std::ispunct

希望这可以帮助!

于 2013-08-24T06:15:41.907 回答
3

您可以使用标准字符串,是的。有替换功能。这里我可以举个例子:

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s = "The,quick,brown,fox,jumps,over,the,lazy,dog.";
    replace(s.begin(), s.end(), ',', ' '); // or any other character
    cout << s << endl;
    return 0;
}

输出将是这样的:

The quick brown fox jumps over the lazy dog.
于 2013-08-24T06:16:05.263 回答
2

Can use:

//std::string input;

std::replace_if(input.begin(), input.end(), 
                 std::ptr_fun<int, int>(&std::ispunct), ' ');
于 2013-08-24T06:21:21.567 回答
1

这是执行此操作的旧 C 方式。它非常明确,但是您可以轻松地编写所需的任何映射:

char* myString = //Whatever you use to get your string
for(size_t i = 0; myString[i]; i++) {
    switch(myString[i]) {
        case ',':
        case '.':
        //Whatever other cases you care to add
            myString[i] = ' ';
        default:
    }
}
于 2013-08-24T08:16:08.857 回答
1

You may use std::ispunct to check whether a char is a punctuation character:

#include <iostream> 
#include <string>  
#include <locale>         // std::locale, std::ispunct
using namespace std;

int main ()
{
    locale loc;
    string str="Hello, welcome!";
    cout << "Before: " << str << endl;    
    for (string::iterator it = str.begin(); it!=str.end(); ++it)
        if ( ispunct(*it,loc) ) *it = ' ';
    cout << "After: " << str << endl;    
}
于 2013-08-24T06:18:00.650 回答