注册 登录
编程论坛 C++教室

请教一下

cstdio 发布于 2018-10-03 14:09, 2084 次点击
程序代码:
int main(){
    string s;
    freopen("sports.in","r",stdin);
    freopen("sports.out","w",stdout);
    cin>>s;
    for(int l=0;l<s.length();l++){
        if(s[l]<'9' && s[l]>'0')//如果是数字
        {//怎么删除这个元素?
}
return 0;
}/*1.体育乐园 (sports.cpp)

 
因为数学老师总是以各种理由霸占体育课的时间来上数学课,体育老师心中积怨已久。
有一 天体育老师把数学老师关在“体育乐园”里,这里对体育老师来说是个乐园,有篮球足球乒 乓球,
但对于身体柔弱的数学老师来说简直就是监牢。乐园大门的锁需要密码才能打开,真 正密码藏在一串字符串 S 里。
作为数学课代表,你要解救数学老师。有一个道理大家都明白, 体育老师因为忌恨数学所以不会用数字作为密码,
S 里去除所有数字后就是真正的密码。给 定 S,请你求出真正的秘密。

 
输入文件 sports.in 共一行包含一串字符串,长度不超过 1000。

 
输出文件 sports.out 输出一串字符串,代表真正密码

 
输入输出样例 1: sports.in sports.out 123soc456cer7890 soccer

 
输入输出样例 2: sports.in sports.out si33zhi44fa55da sizhifada

 
数据范围说明: 对于 100%的数据,1<=字符串长度<=1000
*/
7 回复
#2
林月儿2018-10-03 23:47
过滤不处理不就好了?
#3
cstdio2018-10-04 14:15
回复 2楼 林月儿


程序代码:

/*我的意思是:我想问一下怎么删除一个string中的一个元素??*/
int main(){
    string s;
    freopen("sports.in","r",stdin);
    freopen("sports.out","w",stdout);
    cin>>s;
    const int s1=s.length();
    for(int l=0;l<sl;l++){
        if(s[l]<'9' && s[l]>'0')//如果是数字
        {
    s.erase();//怎么删除这个元素?
}
return 0;
}/*1.体育乐园 (sports.cpp)

 
因为数学老师总是以各种理由霸占体育课的时间来上数学课,体育老师心中积怨已久。
有一 天体育老师把数学老师关在“体育乐园”里,这里对体育老师来说是个乐园,有篮球足球乒 乓球,
但对于身体柔弱的数学老师来说简直就是监牢。乐园大门的锁需要密码才能打开,真 正密码藏在一串字符串 S 里。
作为数学课代表,你要解救数学老师。有一个道理大家都明白, 体育老师因为忌恨数学所以不会用数字作为密码,
S 里去除所有数字后就是真正的密码。给 定 S,请你求出真正的秘密。

 
输入文件 sports.in 共一行包含一串字符串,长度不超过 1000。

 
输出文件 sports.out 输出一串字符串,代表真正密码

 
输入输出样例 1: sports.in sports.out 123soc456cer7890 soccer

 
输入输出样例 2: sports.in sports.out si33zhi44fa55da sizhifada

 
数据范围说明: 对于 100%的数据,1<=字符串长度<=1000
*/

#4
cstdio2018-10-04 14:23
回复 2楼 林月儿




[此贴子已经被作者于2018-10-4 19:39编辑过]

#5
rohalloway2018-10-05 16:12
erase(l.1);  //第一个参数是L

或着可以用迭代器

程序代码:

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

int main()
{
    string str = "9asd2xx0k1i7jkg7jhgjhfg005fgfgfg";

    string::iterator it = str.begin();  
   
    while (it != str.end())
    {
        if (*it <='9' && *it >=  '0')
        {
            str.erase(it);
        }
        it++;
    }

    cout << str << endl;
    system("pause");
    return 0;
}
#6
rohalloway2018-10-05 16:14
erase函数的原型如下:

(1)string& erase ( size_t pos = 0, size_t n = npos );

(2)iterator erase ( iterator position );

(3)iterator erase ( iterator first, iterator last );

也就是说有三种用法:

(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符

(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)

(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
#7
林月儿2018-10-05 21:23
有点像数组缩容
#8
cstdio2018-10-06 11:20
回复 7楼 林月儿
是的
1