鱼C论坛

 找回密码
 立即注册
查看: 2666|回复: 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都是迭代器)

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>

  4. using namespace std;
  5. int main()
  6. {
  7.         char str[101];
  8.         gets(str);
  9.         string a=str;
  10.         for(int i=0;i<a.size();i++)
  11.                 a[i]=tolower(a[i]);
  12.         while(gets(str))
  13.         {
  14.                 string b=str,c=b;
  15.                 for(int i=0;i<b.size();i++)
  16.                         b[i]=tolower(b[i]);
  17.                 int t=b.find(a,0);
  18.                 while(t!=string::npos)
  19.                 {
  20.                         c.erase(t,a.size());
  21.                         b.erase(t,a.size());
  22.                         t=b.find(a,t);
  23.                 }
  24.                 t=c.find(' ',0);
  25.                 while(t!=string::npos)
  26.                 {
  27.                         c.erase(t,1);
  28.                         t=c.find(' ',0);
  29.                 }
  30.                 cout<<c<<endl;
  31.         }
  32.         return 0;
  33. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> 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-4-30 18:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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