如何去掉一个字符串里所有指定字符,并返回?

hyron2005 2008-07-11 12:17:53
比如我要把"Hello Great China"里所有的'a'去掉
应该怎么写这个函数?
...全文
216 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰矿 2008-07-11
  • 打赏
  • 举报
回复
用strtok

#include <string.h>
int main(int argc, char *argv[])
{
char str[] = "aHelloa Great China";
char cut[30];
char *pstr = strtok(str,"a");;
int i = 0,j = 0;
while (pstr != NULL)
{
strcpy(&cut[j], pstr);
j += strlen(pstr);
pstr = strtok(NULL, "a");
}
printf("%s\n",cut);
system("PAUSE");
return 0;
}

结果
Hello Gret Chin
请按任意键继续. . .
lunarfan 2008-07-11
  • 打赏
  • 举报
回复
空间~时间自己衡量

2个数组空间大,时间少
1个数组空间小,时间大
fengdream 2008-07-11
  • 打赏
  • 举报
回复
#include<malloc.h>
char *p = "Hello Great China";
char des[100];

char fun(char *p)
{
int i = 0;

while(*p)
{
if((*p)=='a')
;
else
des[i++] = *p;

p++;
}
}

int main()
{
fun(p);
printf("%s\n",des);
}
JohnHealy 2008-07-11
  • 打赏
  • 举报
回复
楼主,俺就接花献一献

void string_replace(string & strBig, const string & strsrc, const string &strdst)
{
string::size_type pos=0;
string::size_type srclen=strsrc.size();
string::size_type dstlen=strdst.size();
while( (pos=strBig.find(strsrc, pos)) != string::npos)
{
strBig.replace(pos, srclen, strdst);
pos += dstlen;
}
}

代码引自(http://hi.baidu.com/beyoar/blog/item/3e809a3931e0bdf13b87ce52.html)
夹心饼干 2008-07-11
  • 打赏
  • 举报
回复
if(*(p+i+j)==‘a’) 应该才成if(*(p+i)==‘a’)

这是我昨天回复别人要删除一个完全相同的字符串上改的
K行天下 2008-07-11
  • 打赏
  • 举报
回复
直接用for循环, 将数组赋给另一个数组,找到'a'则不赋值, 然后用strcpy拷贝新数组
夹心饼干 2008-07-11
  • 打赏
  • 举报
回复
抱歉不是P1是P
void delstr(char *source)
{
char *p = source;
int i,j;
for(i=0; *(p+i)!='\0'; i++)
{
if(*(p+i+j)==‘a’)
{
for(j=i; *(p+j)!='\0'; j++)
{
*(p+j) = *(p+j+1); // 依次使后面的元素前移,用J可以避免再次纪录I的值
}
}
}
}
夹心饼干 2008-07-11
  • 打赏
  • 举报
回复
void delstr(char *source)
{
char *p1 = source;
int i,j;
for(i=0; *(p+i)!='\0'; i++)
{
if(*(p+i+j)==‘a’)
{
for(j=i; *(p+j)!='\0'; j++)
{
*(p1+j) = *(p1+j+1); // 依次使后面的元素前移,用J可以避免再次纪录I的值
}
}
}
}
  • 打赏
  • 举报
回复
楼上的各位已经把主要思想给出来了,楼主只要稍微地改改!~就可以很灵活了!~
比如将a整成可以由用户输入的!~等
再多修改一下,功能就很强大了!~
jy01807853 2008-07-11
  • 打赏
  • 举报
回复

//兄弟换个想法
#include <iostream>
#include <string>

using namespace std;

int main()
{

string str("Hello Great China");
string str1;

for (string::iterator it = str.begin();
it != str.end(); ++it)
{
if ( *it != 'a')
{
str1 += (*it);
}
}

cout << str << endl;
cout << str1 << endl;
}

堂积Code 2008-07-11
  • 打赏
  • 举报
回复
[color=#FF9900]没添新数组,不用移位[/color]。
堂积Code 2008-07-11
  • 打赏
  • 举报
回复

#include<stdio.h>
int main(){
char *before_exe,*after_exe,cc='a',ch[]="Hello great China";
before_exe=ch,after_exe=ch;
while(*before_exe!='\0'){
if(*before_exe==cc){
before_exe++;//相等,结果数组指针不动
}else{
before_exe++;//不等,同时前进
after_exe++;
}

*after_exe=*before_exe;//同一个数组赋值
}
*(++after_exe)='\0';
printf("%s",ch);
return 0;
}
c00der 2008-07-11
  • 打赏
  • 举报
回复

void delchar(char *str, char a)
{
char *newstr = NULL;
char *pNew;
newstr = (char *)malloc(50);//请教:我不知道该如何更好的分配内存
pNew = newstr;
while (*str != '\0') {
if (*str != a)
{
*newstr = *str;
//printf("%",newstr);
newstr++;
}
str++;
}
*newstr = 0;
printf("%s\n", pNew);
}
Y神圣 2008-07-11
  • 打赏
  • 举报
回复
deleteToken(char *p,ch)
{
int nSize = sizeof(char);
for(;*(p+nSize) != '\0';)
{
if (*p == ch)
*p = *(p+nSize);
p = p + nSize;
}

*p = '\0';
}

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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