如何将字母数字和特殊字符字符串转换为字母字符串?
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_of
、std::regex_replace
、std::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
在一个函数中,传递一个包含字母、数字和特殊字符的字符串。该函数应该 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_of
、std::regex_replace
、std::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