求解一道与字符串相关的题目 , 各位达人帮我想想!!

xiangxuf 2008-10-28 04:06:47
将字符串"askaaaasksssaskkkk" ,删除指定字符ask,删除后的结果是"aaassskkk" 。 各位说下该怎样编个程序啊?
...全文
217 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
小猴饲养员 2008-10-30
  • 打赏
  • 举报
回复
mark
Czx_boy 2008-10-29
  • 打赏
  • 举报
回复
修正7楼的错误。
#include <iostream> 
using namespace std;
int main()
{
char str[]="askaskaaaasksssaskkkk";
char mdl[4]="ask";
char rslt[20]="";
char *p=str;
int i=0;
while(*p)
{
if(*p=='a' && *(p+1)=='s' && *(p+2)=='k')
{
p+=3;
//rslt[i++]=*p++;
}
else
{
rslt[i++]=*p++;
}
}
cout<<rslt<<endl;
return 0;
}
xiangxuf 2008-10-29
  • 打赏
  • 举报
回复
if(idx != string::npos) // 如果没找到就返回,找到则进入下面处理流程。
{
src.replace(idx, src.size(), src.substr(idx + subStr.size())); // 用子串之后的所有字符替换该
// 子串



谁能帮解释一下十楼上的src.replace()函数具体是怎样使用和操作的吗?? 因为我也有上百度查过, 不过看了没什么效果。还是想听各位说说
yuliyang 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 xiangxuf 的回复:]
不过7楼的那程序 当遇到两个ask时就会失效,应该改进改进
[/Quote]
感谢。。。根据你的意见 。。又改了一次

#include <iostream>
using namespace std;
void delsubstr(char *strOri,char *strSub,char *strDest);
int main()
{
char str[]="askaaaaskask";
char mdl[4]="ask";
char rslt[20]="";

delsubstr(str,mdl,rslt);
cout<<rslt<<endl;
return 0;
}

void delsubstr(char *strOri,char *strSub,char *strDest)
{
char *pOri=strOri;
char *pSub=strSub;
char *pDst=strDest;
char *mark;

while(*pOri)
{
if(*pOri!=*pSub)
{
*pDst++=*pOri++;
}
else
{
mark=pOri;
while(*pOri==*pSub && *pOri)
{
pOri++;
pSub++;
}
if(*pSub)
{
pOri=mark;
*pDst++=*pOri++;
}

pSub=strSub;

}
}
*pDst='\0';
}
xupingping 2008-10-29
  • 打赏
  • 举报
回复
7楼的对吗???好象有问题吧
如果原串是askaskaassask呢???



[Quote=引用 20 楼 xiangxuf 的回复:]
感觉7楼的最易懂。 呵
[/Quote]
Big鹏 2008-10-29
  • 打赏
  • 举报
回复

顶10楼的,通用性强!
bobye1230 2008-10-29
  • 打赏
  • 举报
回复
顶十楼~~~用标准库~~~
我的目标:熟练使用标准库。。。
bobye1230 2008-10-29
  • 打赏
  • 举报
回复
顶十楼~~~用标准库~~~
熟练使用标准库。。。
xiangxuf 2008-10-29
  • 打赏
  • 举报
回复
repalce()是说从idx开始到src.size()这个长度之内,用src.substr..来代替
src.ubstr()是表示从(idx+substr.size())开始到串结束的一个子字符串

大家说是不是像我说的那样啊?
xiangxuf 2008-10-28
  • 打赏
  • 举报
回复
不过7楼的那程序 当遇到两个ask时就会失效,应该改进改进
xiangxuf 2008-10-28
  • 打赏
  • 举报
回复
感觉7楼的最易懂。 呵
yangkunhenry 2008-10-28
  • 打赏
  • 举报
回复

#include<iostream>
#include<string>
using namespace std;
void change(string &str1,const string str2)
{
size_t i=0,j=0;
size_t len=str1.size();
while(i<len)
{
while(str1[i]==str2[j]&&i<str1.size()&&j<str2.size())
{
i++;
j++;
}
if(j==str2.size())
{
strcpy(&str1[i-j],&str1[i]);
len=len-str2.size();
}
i=i-j;
j=0;
i++;
}
}
int main()
{
string str1="askaaaasksssaskkkk";
string str2="ask";
change(str1,str2);
cout<<str1<<endl;
return 0;
}

呵,找个会的题做做……
yuliyang 2008-10-28
  • 打赏
  • 举报
回复
呃。。重写一个。
#include <iostream>
using namespace std;
void delsubstr(char *strOri,char *strSub,char *strDest);
int main()
{
char str[]="askaaaasksssaskkkk";
char mdl[4]="ask";
char rslt[20]="";

delsubstr(str,mdl,rslt);
cout<<rslt<<endl;
return 0;
}

void delsubstr(char *strOri,char *strSub,char *strDest)
{
char *pOri=strOri;
char *pSub=strSub;
char *pDst=strDest;
char *mark;

while(*pOri)
{
if(*pOri!=*pSub)
{
*pDst++=*pOri++;
}
else
{
mark=pOri;
while(*pOri==*pSub)
{
pOri++;
pSub++;
}
if(*pSub)
{
pOri=mark;
*pDst++=*pOri++;
}
else
{

}
pSub=strSub;

}
}
}
llguan 2008-10-28
  • 打赏
  • 举报
回复
顶楼上的楼上的。
不用string的,就别在c++里面讨论了,哈
once_and_again 2008-10-28
  • 打赏
  • 举报
回复
不能直接删除吧,
应该是 const型的常量,
对不?
还是 数组的不能删除。?
weiyijiji 2008-10-28
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
using namespace std;
int main(){
string s="askaaaasksssaskkkk";
int pos=0;
while((pos=s.find("ask",pos))!=string::npos)
{
s.erase(pos,3);

}
cout<<s<<endl;
return 0;
}
lq651659889 2008-10-28
  • 打赏
  • 举报
回复
关注
dreamer_shax 2008-10-28
  • 打赏
  • 举报
回复
10楼 比较的好
kiffa 2008-10-28
  • 打赏
  • 举报
回复
考虑到效率,这里用了非const引用来传递要被修改的str,而不是传递和返回副本,因此心里多少有些不安。

一定要在注释和文档中说明此函数会改变输入的参数,或者想个暗示强烈的参数名以表示参数会被修改,我这里是随便取了个名字,没有多想。

另,此函数在替换过程中存在重复写,又用到了递归,因此在时空效率上都有所不足。
pssui 2008-10-28
  • 打赏
  • 举报
回复
void delete_substring(char *sour, char *sub)
{
if (sour == NULL && sub == NULL)
{
return;
}

char remainstring[20];
int i = 0;
char *p, *des;
p = sub;
des = remainstring;

while (*sour)
{
while (*p)
{
if (*p == *sour)
{
break;
}
else
p++;
}

if (*p == '\0')
{
remainstring[i++] = *sour;
}

sour++;
p = sub;
}

cout << des << endl;
}
加载更多回复(10)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧