C 练习实例32
题目:删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。
程序分析:无。
实例
// Created by www.runoob.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] = {0}; // 使用256大小的数组来存储ASCII字符,初始化为0
// 如果要删除的字符集为空,则直接返回原字符串
if (charSet == NULL)
return str;
// 标记要删除的字符
for (int i = 0; i < strlen(charSet); i++)
hash[(unsigned char)charSet[i]] = 1; // 将要删除的字符的ASCII码位置标记为1
int currentIndex = 0; // 用于追踪当前的字符串索引
// 通过遍历字符串来删除指定的字符
for (int i = 0; i < strlen(str); i++) {
// 如果当前字符不在要删除的字符集中,则保留该字符
if (!hash[(unsigned char)str[i]])
str[currentIndex++] = str[i];
}
str[currentIndex] = '\0'; // 在字符串的末尾添加空字符,以表示字符串的结束
return str;
}
int main() {
char s[] = "a"; // 要删除的字母
char s2[] = "aca"; // 目标字符串
printf("%s\n", deleteCharacters(s2, s)); // 打印删除指定字符后的字符串
return 0;
}
以上实例输出结果为:
c
C 语言经典100例
叮咚
a12***59648z@qq.com
参考解法:
#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"); }叮咚
a12***59648z@qq.com
Jinlaips
jin***ps@qq.com
参考方法:
#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; }Jinlaips
jin***ps@qq.com
南珂007
182***4224@qq.com
参考方法:
/* 删除一个字符串中的指定字母,如:字符串 "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; }南珂007
182***4224@qq.com
Eric
wxp***4@163.com
参考方法:
#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; }Eric
wxp***4@163.com
HIT_CCC
117***2963@qq.com
参考方法:
#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++; } } }HIT_CCC
117***2963@qq.com
CloudRay
syh***guang123@163.com
参考方法:
#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; }CloudRay
syh***guang123@163.com
ronnyz
221***8677@qq.com
参考方法:
#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; }ronnyz
221***8677@qq.com
huanhuan
992***291@qq.com
参考方法(简化程序):
#include<stdio.h> #include<stdlib.h> #include<string.h> void main() { char a[100],b[100],c; int i,n=0; printf("请输入字符串:"); gets(a); printf("请输入要删除的字符:"); c=getchar(); for(i=0;a[i]!='\0';i++) if(a[i]!=c) { b[n]=a[i]; n++; } b[n]='\0'; strcpy(a,b); printf("结果为%s\n",a); system("pause"); }huanhuan
992***291@qq.com