C删除字符

CloudStrifers 2011-04-29 12:38:50
编写一函数delchar(s,c)该函数将字符串s中出现的所有c字符删除,不管有无都要做出相应说明,例如删除了几个c字符。
...全文
265 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
如此美丽的你 2011-05-15
  • 打赏
  • 举报
回复
#include "stdio.h"

int delchr(char *p, char c)
{
int ir = 0, i = 0;
char *temp = p, *ch = p;
for(i = 0; i < strlen(p); i++)
{

if(temp[i] == c)
{
ir++;
*ch = temp[i];
}
else
{
*ch = temp[i];
ch++;
}
}

memset(ch, 0, ir);
return ir;
}
int main()
{
char *constp = "aabbccfasdgsjasbgbweoiueiasdfbaadkfkbbvaljfbvbafabf", *p;

char c = 'b';
p = (char*)malloc(strlen(constp)+1);
strcpy(p, constp);

printf("string(%s) has %d char(%c),and has been deleted!\n", p, delchr(p, c), c);
printf("result string = %s", p);
free(p);
getch();
return 1;
}

abcdef0966 2011-05-15
  • 打赏
  • 举报
回复

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int del_char(char* src, char c)
{


if ( NULL == src)
{
fprintf(stderr, "del_char failed: invalid input.\n");
return -1;
}

char* pchTemp = (char*)malloc(strlen(src) + 1);
if ( NULL == pchTemp)
{
fprintf(stderr, "del_char failed: malloc failed\n");
return -1;
}

int num = 0;
int i = 0;
int j = 0;
while ( src[i] != '\0')
{
if ( src[i] != c)
{
pchTemp[j++] = src[i++];
}
else
{
i++;
num++;
}
}

pchTemp[j] = '\0';
if ( 0 != num)
{
strncpy(src, pchTemp, strlen(pchTemp) + 1);
}

free(pchTemp);

return num;
}

int main(int argc, char* argv[])
{
if ( 3 != argc)
{
fprintf(stderr, "Usage: %s [src] [c]\n", argv[0]);
return -1;
}
char szSrc[512] = {0};
snprintf(szSrc, sizeof(szSrc), "%s", argv[1]);

char c = argv[2][0];

int num = 0;

if ( (num = del_char(szSrc, c)) < 0)
{
return -1;
}
else
{
printf("num: %d after del %c: %s\n", num, c, szSrc);
return 0;
}

return 0;



}
abcdef0966 2011-05-15
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int del_char(char* src, char c)
{


if ( NULL == src)
{
fprintf(stderr, "del_char failed: invalid input.\n");
return -1;
}

char* pchTemp = (char*)malloc(strlen(src) + 1);
if ( NULL == pchTemp)
{
fprintf(stderr, "del_char failed: malloc failed\n");
return -1;
}

int num = 0;
int i = 0;
int j = 0;
while ( src[i] != '\0')
{
if ( src[i] != c)
{
pchTemp[j++] = src[i++];
}
else
{
i++;
num++;
}
}

pchTemp[j] = '\0';
if ( 0 != num)
{
strncpy(src, pchTemp, strlen(pchTemp) + 1);
}

free(pchTemp);

return num;
}

int main(int argc, char* argv[])
{
if ( 3 != argc)
{
fprintf(stderr, "Usage: %s [src] [c]\n", argv[0]);
return -1;
}
char szSrc[512] = {0};
snprintf(szSrc, sizeof(szSrc), "%s", argv[1]);

char c = argv[2][0];

int num = 0;

if ( (num = del_char(szSrc, c)) < 0)
{
return -1;
}
else
{
printf("num: %d after del %c: %s\n", num, c, szSrc);
return 0;
}

return 0;



}

的确没有五楼的哥们写得好
陈思有 2011-05-15
  • 打赏
  • 举报
回复
#include <stdio.h>


int delchar( char *str,char c );

void main()
{
int n;
char str[30];
char c;
gets(str);
printf("insert the char:\n");
c = getchar();
n=delchar( str,c );
printf("%s\n",str);
printf("%d\n",n);
}

int delchar( char *str, char c )
{
int n=0,i,j;

for ( i=0; *(str+i)!='\0'; i++ )
{
if ( *(str+i) == c )
{
n++;
for ( j=i; *(str+j)!='\0'; j++ )
{
*(str+j) = *(str+j+1);
}
}
}
return( n );
}
黑夜de星辰 2011-05-15
  • 打赏
  • 举报
回复
5楼哥们的写法,欣赏
AnYidan 2011-05-15
  • 打赏
  • 举报
回复
作业帖?
要求两个输入参数

对删除字符的说明放在 函数中好,还是返回好?
张小毛 2011-04-29
  • 打赏
  • 举报
回复
下班喽,下班喽

#include "stdio.h"

int delchr(char *p, char c)
{
int ir = 0, i = 0;
char *temp = p, *ch = p;
for(i = 0; i < strlen(p); i++)
{

if(temp[i] == c)
{
ir++;
*ch = temp[i];
}
else
{
*ch = temp[i];
ch++;
}
}

memset(ch, 0, ir);
return ir;
}
int main()
{
char *constp = "aabbccfasdgsjasbgbweoiueiasdfbaadkfkbbvaljfbvbafabf", *p;

char c = 'b';
p = (char*)malloc(strlen(constp)+1);
strcpy(p, constp);

printf("string(%s) has %d char(%c),and has been deleted!\n", p, delchr(p, c), c);
printf("result string = %s", p);
free(p);
getch();
return 1;
}
aa_niaofang 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhao4zhong1 的回复:]

引用 2 楼 bdmh 的回复:
C/C++ code

void delchar(char *p)
{
int i = 0,j=0;
char *t = new char[strlen(p)];
while(*p!=0)
{
if (*p == 'c')
{
i+=1;
}
else
……

请教有new没delete会不会产生内存泄漏?
[/Quote]
这么短的程序一般不会,程序结束时,此段内存会被 回收(具体是编译器 还是 操作系统干的 不太清楚),如果比较大的程序,这段程序可能会有问题
海盗医生 2011-04-29
  • 打赏
  • 举报
回复

int delchar(char *szSour, char *szOut, char aDel)
{
char *cpSour = szSour;
char *cpOut = szOut;
int iCnt=0;
for(;*cpSour!='\0';cpSour++)
{
if(*cpSour==aDel)
{
iCnt++;
}
else
{
*cpOut++=*cpSour;
}
}
return iCnt;
}

调用方法:
char *szSour="abcdckkkdcddc";
char szOut[32]={0};
int iDelCnt = delchar(szSour, szOut, 'c');

相比上边几种,这个应该更通用一下,也更加简洁
我真的是琦琦 2011-04-29
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LIM 20

void Del_str (char *srcStr, char * objStr,int len,int* count);

int main (void)
{
char str[LIM] = "TheClanguage";
char *p;
int n;
int count = 0;
n = strlen (str);
p = (char*)malloc((n+1)*sizeof(char));
memset(p,0,sizeof(p));
Del_str(str,p,n,&count);
printf("%s\n",p);
printf("%d\n",count);
free(p);
return 0;
}

void Del_str (char *srcStr,char* objStr,int len,int* count)
{
int i = 0,j=0;
int index = 0;
index = *count;
for (i = 0; i < len;i++)
{
if( (*srcStr == 'c') || (*srcStr == 'C'))
{
index++;
}
else
{
objStr[j] = *srcStr;
j++;
}
*srcStr++;
}
objStr[j] = '\0';
*count = index;
}

(*^__^*) 嘻嘻……
赵4老师 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
C/C++ code

void delchar(char *p)
{
int i = 0,j=0;
char *t = new char[strlen(p)];
while(*p!=0)
{
if (*p == 'c')
{
i+=1;
}
else
……
[/Quote]
请教有new没delete会不会产生内存泄漏?
bdmh 2011-04-29
  • 打赏
  • 举报
回复

void delchar(char *p)
{
int i = 0,j=0;
char *t = new char[strlen(p)];
while(*p!=0)
{
if (*p == 'c')
{
i+=1;
}
else
{
t[j] = *p;
j+=1;
}
p++;
}
t[j+1] = 0;
printf("%s",t);
printf("%d",i);
}
void main()
{
char *p = "abccdecab";
delchar(p);
}
贾囧雷 2011-04-29
  • 打赏
  • 举报
回复

69,369

社区成员

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

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