如何从 C++ 中的字符串中减去字符?
How to subtract char out from string in c++?
你好我想知道如何从字符串中减去字符串
例如
如果字符串 s = "124ab"
我可以使用 sstream 轻松提取整数,但我不知道如何提取字符串
我想从s中提取ab;
我有很多绳子,但他们没有任何规定。
s 可以是“3456fdhgab”或“34a678”
string removeNumbers(string str)
{
int current = 0;
for (int i = 0; i < str.length(); i++)
{
if (!isdigit(str[i])) {
str[current] = str[i];
current++;
}
}
return str.substr(0, current);
}
int main()
{
string str;
cout <<"Enter the string : " <<endl;
getline(cin,str);
cout <<"Modified string : " <<removeNumbers(str) <<endl;
}
您可以使用 std::isdigit
to check if a character is a digit. You can use the erase-remove idiom 删除数字字符。
因为 std::isdigit
有重载,所以必须将其包装在 lambda 中才能在算法中使用:
#include <string>
#include <iostream>
#include <algorithm>
#include <cctype>
int main() {
std::string inp{"124ab"};
inp.erase(std::remove_if(inp.begin(),inp.end(),[](char c){return std::isdigit(c);}),inp.end());
std::cout << inp;
}
ab
并且因为您要求使用字符串流,这里是您如何使用自定义 operator<<
提取 non-digits:
#include <string>
#include <iostream>
#include <cctype>
#include <sstream>
struct only_non_digits {
std::string& data;
};
std::ostream& operator<<(std::ostream& os, const only_non_digits& x) {
for (const auto& c : x.data){
if (std::isdigit(c)) continue;
os << c;
}
return os;
}
int main() {
std::string inp{"124ab"};
std::cout << only_non_digits{inp} << "\n";
std::stringstream ss;
ss << only_non_digits{inp};
std::cout << ss.str() << "\n";
}
ab
ab
你好我想知道如何从字符串中减去字符串
例如
如果字符串 s = "124ab" 我可以使用 sstream 轻松提取整数,但我不知道如何提取字符串
我想从s中提取ab; 我有很多绳子,但他们没有任何规定。 s 可以是“3456fdhgab”或“34a678”
string removeNumbers(string str)
{
int current = 0;
for (int i = 0; i < str.length(); i++)
{
if (!isdigit(str[i])) {
str[current] = str[i];
current++;
}
}
return str.substr(0, current);
}
int main()
{
string str;
cout <<"Enter the string : " <<endl;
getline(cin,str);
cout <<"Modified string : " <<removeNumbers(str) <<endl;
}
您可以使用 std::isdigit
to check if a character is a digit. You can use the erase-remove idiom 删除数字字符。
因为 std::isdigit
有重载,所以必须将其包装在 lambda 中才能在算法中使用:
#include <string>
#include <iostream>
#include <algorithm>
#include <cctype>
int main() {
std::string inp{"124ab"};
inp.erase(std::remove_if(inp.begin(),inp.end(),[](char c){return std::isdigit(c);}),inp.end());
std::cout << inp;
}
ab
并且因为您要求使用字符串流,这里是您如何使用自定义 operator<<
提取 non-digits:
#include <string>
#include <iostream>
#include <cctype>
#include <sstream>
struct only_non_digits {
std::string& data;
};
std::ostream& operator<<(std::ostream& os, const only_non_digits& x) {
for (const auto& c : x.data){
if (std::isdigit(c)) continue;
os << c;
}
return os;
}
int main() {
std::string inp{"124ab"};
std::cout << only_non_digits{inp} << "\n";
std::stringstream ss;
ss << only_non_digits{inp};
std::cout << ss.str() << "\n";
}
ab
ab