鱼C论坛

 找回密码
 立即注册
查看: 2912|回复: 2

[技术交流] 044:字符串的查找删除

[复制链接]
发表于 2018-2-17 22:59:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述:

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入:

输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出:

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入

in
#include
int main()
{

printf("  Hi  ");
}

样例输出

#clude
tma()
{

prtf("Hi");
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-17 23:30:31 | 显示全部楼层
string中 find()的应用  (rfind() 类似,只是从反向查找)
原型如下:
(1)size_t find (const string& str, size_t pos = 0) const;  //查找对象--string类对象
(2)size_t find (const char* s, size_t pos = 0) const; //查找对象--字符串
(3)size_t find (const char* s, size_t pos, size_t n) const;  //查找对象--字符串的前n个字符
(4)size_t find (char c, size_t pos = 0) const;  //查找对象--字符
结果:找到 -- 返回 第一个字符的索引
     没找到--返回   string::npos

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都是迭代器)
#include<cstdio>
#include<cstring>
#include<iostream>

using namespace std;
int main()
{
        char str[101];
        gets(str);
        string a=str;
        for(int i=0;i<a.size();i++)
                a[i]=tolower(a[i]);
        while(gets(str))
        {
                string b=str,c=b;
                for(int i=0;i<b.size();i++)
                        b[i]=tolower(b[i]);
                int t=b.find(a,0);
                while(t!=string::npos)
                {
                        c.erase(t,a.size());
                        b.erase(t,a.size());
                        t=b.find(a,t);
                }
                t=c.find(' ',0);
                while(t!=string::npos)
                {
                        c.erase(t,1);
                        t=c.find(' ',0);
                }
                cout<<c<<endl;
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-17 23:30:46 | 显示全部楼层
while(a!='\n')
{
    if(b[i++]!=' ')
       {
        c[j++]=b[i];
         }
    c[j]='\0';
}

printf("%s",c);

你看看这种套路行吗我也没做过而且我是小白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 07:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表