新人求家解决几个字符串的有关问题
新人求家解决几个字符串的问题!
1 把一个字符串按数字从小到大,字母从a到z排列,列如15ad119r排列为11159adr;
2 获取字符串中指定字符出现的次数,如15ad119r获取1的结果为3
3 去掉一个或几个字符. 如15ad119 去掉1个1 为5ad119r 去掉2个1为5ad19r
感谢各位大神提供下思路,具体的函数,或者给出列子。
------解决思路----------------------
给一个删除字符的程序,第一个用排序,第二个类似:
------解决思路----------------------
1 把一个字符串按数字从小到大,字母从a到z排列,列如15ad119r排列为11159adr;
2 获取字符串中指定字符出现的次数,如15ad119r获取1的结果为3
3 去掉一个或几个字符. 如15ad119 去掉1个1 为5ad119r 去掉2个1为5ad19r
感谢各位大神提供下思路,具体的函数,或者给出列子。
------解决思路----------------------
给一个删除字符的程序,第一个用排序,第二个类似:
#include <stdio.h>
void remove_char(const char* src, char* dest, char ch, int n)
{
char* s = (char*)src;
char* d = dest;
while(*s){
if((*s == ch) && (n > 0)){
n--;
}
else{
*d++ = *s;
}
s++;
}
*d = '\0';
}
int main(int argc, char* argv[])
{
const char* src = "15ad119";
char dest[32];
remove_char(src, dest, '1', 1);
printf("%s\n", dest);
remove_char(src, dest, '1', 2);
printf("%s\n", dest);
remove_char(src, dest, '1', 3);
printf("%s\n", dest);
return 0;
}
------解决思路----------------------
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
string& remove_m_c(string &s, int m, char c)
{
if (s.size() < m)
{
cout << "Can't remove character '" << c << "' for " << m << " times. It exceeds the length of " << s << endl;
return s;
}
int i = 0;
while ( m > 0)
{
if (i >= s.size())
break;
if (s[i] == c)
{
s.erase(i, 1);
--m;
}
else
++i;
}
return s;
}
int main()
{
//把一个字符串按数字从小到大,字母从a到z排列,列如15ad119r排列为11159adr;
string str = "15ad119r";
sort(str.begin(), str.end());
cout << str << endl;
//获取字符串中指定字符出现的次数,如15ad119r获取1的结果为3
str = "15ad119r";
int n = count_if(str.begin(), str.end(), bind2nd(equal_to<char>(), '1'));
cout << n << endl;
//去掉一个或几个字符. 如15ad119 去掉1个1 为5ad119r 去掉2个1为5ad19r
str = "15ad119r";
remove_m_c(str, 3, '1');
cout << str << endl;
return 0;
}