C 练习实例32
题目:删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。
程序分析:无。
实例
// Created by www.facesoho.com on 15/11/9.
// Copyright © 2015年 小鸟启蒙. All rights reserved.
//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// 删除字符串中指定字母函数
char* deleteCharacters(char * str, char * charSet)
{
int hash [256];
if(NULL == charSet)
return str;
for(int i = 0; i < 256; i++)
hash[i] = 0;
for(int i = 0; i < strlen(charSet); i++)
hash[charSet[i]] = 1;
int currentIndex = 0;
for(int i = 0; i < strlen(str); i++)
{
if(!hash[str[i]])
str[currentIndex++] = str[i];
}
str[currentIndex] = '\0';
return str;
}
int main()
{
char s[2] = "a"; // 要删除的字母
char s2[5] = "aca"; // 目标字符串
printf("%s\n", deleteCharacters(s2, s));
return 0;
}
以上实例输出结果为:
c

文人墨客
参考方法:
#include <stdio.h> #include <string.h> #include <stdlib.h> char *deleteCh(char *ch,char *str){ char *p,*q,*r,*s; int len1,len,cnt=0,i; len1=strlen(str); p=str; //统计该字符在字符串中出现的次数 while((p=strchr(p,ch))!=NULL){ cnt++; p+=1; //指针移向该字符的后一个字符 } len=len1-cnt; //新字符串的长度 s=r=(char *)malloc(len); //分配动态存储空间 p=str; while(1){ q=strchr(p,ch); if(q!=NULL){ i=q-p; //出现位置距离开始位置距离 strncpy(r,p,i); r+=i; p=q+1; } else{ //表明剩余str中已经没有ch了 strcpy(r,p); break; } } return s; } int main(){ char ch='a'; char str[]="saejwajeaawaw"; char *d; d=deleteCh(ch,str); printf("result= %s\n",d); free(d); return 0; }文人墨客
参考方法:
#include <stdio.h> #include <string.h> int main() { char zifu[1000]; const char del[1000]; char *rat; printf("请输入一串字符\n"); scanf("%s",&zifu); printf("请输入你想删除字符\n"); scanf("%s",&del); printf("已删除:%s\n",del); rat=strtok(zifu, del);/*strtok()用来将字符串分割成一个个片段, 当strtok()在参数s的字符串中发现参数del中包含的分割字符时, 则会将该字符改为\0 字符*/ printf("%s",rat); rat=strtok(NULL,del);/*原字符串变为分割完成之后的第一个字符串, 剩余的字符串存储在一个静态变量中*/ printf("%s\n",rat); return 0; }文人墨客
参考方法:
#include<stdio.h> #include<string.h> #define N 80 void delete_x(char *str,char *s,char ch); int main(void) { char str[N],ch; char s[N]; memset(str,'\0',sizeof(str)); memset(s,'\0',sizeof(s)); gets(str); scanf(" %c",&ch); delete_x(str,s,ch); puts(s); return 0; } void delete_x(char *str,char *s,char ch) { int i,j = 0, str_len = strlen(str); for(i = 0; i < str_len; i++) { if(str[i] != ch) { s[j] = str[i]; j++; } } }文人墨客
参考方法:
#include <stdio.h> #include <string.h> int main() { char s[128] = {0}, s1[128] = {0}, ch; int i = 0, j = 0; printf("请输入字符串:"); fgets(s, (sizeof s / sizeof s[0]), stdin); printf("请输入要删除的字符:"); scanf("%c", &ch); for (i = 0; i < strlen(s); i++) { if (s[i] == ch) continue; s1[j++] = s[i]; } puts(s); puts(s1); return 0; }文人墨客
参考方法:
/* 删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。 */ #include<stdio.h> #include<strings.h> #include<string.h> int main() { char c;//要删的字符 int i=0; int j; int len; char bzo;//清空缓存 char buf[20]; bzero(buf,20); printf("Input a strings \n"); scanf("%s",buf); while((c=getchar())!='\n');//清空缓存 printf("Input a char:\n"); scanf("%c",&c); while(i!=strlen(buf)) { if(c==buf[i]) { for(j=i;j<strlen(buf);j++) { buf[j]=buf[j+1];//用后面的一个替换当前一个 } i--;//回到当前的一个 } i++; } if(buf[strlen(buf)-1]==c)//判断最后一个 { buf[strlen(buf)-1]='\0'; } printf("%s\n",buf); return 0; }文人墨客
参考方法:
#include <stdio.h> int main(void) { char ch; int i, j; char s[] = "I want to learn English."; puts(s); printf("请输入要删除的字母: "); scanf("%c", &ch); for (i = 0; s[i] != '\0'; i++) { if (s[i] == ch) { for (j = i; s[j] != '\0'; j++) { s[j] = s[j + 1]; } s[j] = '\0'; } } puts(s); return 0; }文人墨客
参考解法:
#include<stdio.h> #include<string.h> int main() { char c[1000]; printf("请输入原始字符串: \n"); fgets(c, (sizeof c / sizeof c[0]), stdin); char d; printf("请输入要删除的字符: \n"); scanf("%c",&d); char e[1000]; int j=0; getchar(); int i=0; while(i<strlen(c)) { if(c[i]!=d){ e[j]=c[i]; j++; } i++; } printf("删除后字符串: \n"); for(int z=0;z<j;z++) { printf("%c",e[z]); } printf("\n"); }