如何将字母数字和特殊字符字符串转换为字母字符串?

How to convert alpha numerical and special characters string to alphabetical string?

在一个函数中,传递一个包含字母、数字和特殊字符的字符串。该函数应该 return 只有字符串中的字母。

我尝试了以下代码,但它也给出了数字。我哪里错了?

在此代码中(使用 c++11)std::string::find_first_not_of 正在使用 stl 算法

 std::string jobName1 = "job_2";

 std::size_t found = 
  jobName1.find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJK
  LMNOPQRSTUVWXYZ");
 while (found!=std::string::npos)
 {
    jobName1.erase(found,1);
    found=jobName1.find_first_not_of("abcdefghijklmnopqrstuvwxyzAB
    CDEFGHIJKLMNOPQRSTUVWXYZ",(found+1));
 }

输入:

job_2

输出:

job2

预计:

job

根据您的描述,这应该可以完成工作:

#include <iostream>
#include <string>
#include <regex>

int main ()
{
  std::string jobName1 = "job_2";
  std::regex regex ("[0-9_]*");

  auto result = std::regex_replace (jobName1, regex, "");
  std::cout << result << std::endl;

  return 0;
}

如果您要查找的不是您编写的代码,您可以使用 std::remove_if:

 #include <iostream>
 #include <string>
 #include <algorithm>
 #include <cctype>

 int main()
 {
     std::string jobName1 = "job_2";
     jobName1.erase(std::remove_if(jobName1.begin(), jobName1.end(),
                                  [](char ch){return !std::isalpha(ch);}),
                                  jobName1.end());
     std::cout << jobName1;
 }

输出:

job

作为已经给出的 std::string::find_first_not_ofstd::regex_replacestd::remove_if 解决方案的替代方案,std::copy_if can be used to copy the charectors of given string to new one, if it std::isalpha。(致谢 @PaulMcKenzie 用于灌注正确的算法)

(See Live)

#include <iostream>
#include <string>
#include <algorithm> // std::copy_if
#include <iterator>  // std::back_inserter 
#include <cctype>    // std::isalpha

int main()
{
    const std::string jobName1{ "job_2" };
    std::string result;
    std::copy_if(std::cbegin(jobName1), std::cend(jobName1),
        std::back_inserter(result),
        [](const char chr) noexcept { return std::isalpha(chr); });
    std::cout << result;
    return 0;
}

输出:

job