指针 删除字符串
/*从键盘输入一个字符串,和一个字符,使用指针,将字符串中,这个字符出现的地方全部删除。比如:
输入的串为 AABBCCDDEE ,输入的字符是CC
输出的结果应该是:AABBDDEE
提示:如果指针cp指向字串首地址,则*cp访问当前字符,cp++,访问下一个,直到*cp='\0'为止。*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
char ch1[100]="ababbbbcbcbb",ch2[100]="bb",ch3[100],*cp,*cp2,*t;
int i,j,k=0,m;
/*printf("请输入字符串:");
gets(ch1);
printf("请输入要删除的字符串:");
gets(ch2);*/
cp=ch1;
cp2=ch2;
m=strlen(ch2);
while(*cp!='\0')
{
t=cp;
if(*cp==*cp2)
{
j=1;
cp++;
cp2++;
for(i=0;i<m-1;i++)
{
if(*cp++==*cp2++)
j++;
else
break;
}
cp2=ch2;
if(j==m)
{
if(*cp==*cp2)
cp--;
else
{
ch3[k]=*cp;
k++;
}
}
else
{
cp=t;
ch3[k]=*cp;
k++;
}
}
else
{
ch3[k]=*cp;
k++;
}
cp++;
}
ch3[k]='\0';
puts(ch3);
}
[size=24px][/size][color=#FF0000][/color]各位大神,帮我看看,这个程序能不能再完美一点啊???!!!!
[解决办法]
字符串匹配有函数strstr.
拷贝有strcpy.
在此基础写会简单很多.
[解决办法]
#include <stdio.h>#include <string>char* find_str_pos(char* srcstr, char *substr){ if(srcstr == NULL || substr == NULL) return (char *) NULL; if(!*srcstr || !*substr) return (char *) NULL; char *read_ptr = srcstr; char *rm_ptr = substr; while(*srcstr) { read_ptr = srcstr; rm_ptr = substr; do { if (*rm_ptr == '\0') return srcstr; } while (*read_ptr++ == *rm_ptr++); srcstr++; } return (char *) NULL;}int main(){ char readbuf[100] = "AABBCCDDEE"; char rmbuf[10] = "CC"; char newbuf[100] = {0}; int readlen = strlen(readbuf); int rmlen = strlen(rmbuf); char *pos = find_str_pos(readbuf,rmbuf); //指向删除部分开头 int poslen = strlen(pos); if(!pos) return 0; //字符串不存在相同项 int offset = 0; offset = readlen - poslen; memcpy(newbuf,readbuf,offset); memcpy(newbuf+offset,pos+rmlen,poslen-rmlen); return 0;}
[解决办法]
仅供参考
#include <stdio.h>#include <string.h>char s[256];char *p;int r,n,i;int main() { while (1) { printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n"); fgets(s,256,stdin); if ('\n'==s[0]) break; p=s; while (1) { p=strstr(p,"%20"); if (p) { memmove(p+1,p+3,strlen(p)-3+1); p[0]=' '; } else break; } p=s; while (1) { p=strstr(p,"你懂得"); if (p) { memmove(p+6,p+6,strlen(p)-6+1); for (i=0;i<6;i++) p[i]='X'; } else break; } printf("%s",s); } return 0;}//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX"://abcdefg%20helloworld%20something.pdf//abcdefg helloworld something.pdf//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX"://这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX"://
[解决办法]
#include<stdio.h>#include<string.h>main(){ char *str1="AABBCCDDBB",*str2="BB",*str3; char s[100]; int i=0,n=0,itemp=0; int h,m,j,k; m=strlen(str1); h=strlen(str2); str3=str1; while(*str1!='\0') { if(*str1!=*str2) { str1++; i++; } else { str1++; i++; str2++; h--; } if(h==0) { str2="BB"; h=strlen(str2); itemp=i; i=0; for(j=0;j<itemp;j++) { if(j<itemp-h) s[n++]=*str3; str3++; } } } if(h!=0) { for(j=0;j<m-itemp;j++) s[n++]=*str3++; s[n]='\0'; } puts(s);}
[解决办法]
#include<stdio.h>#include<string.h>main(){ char *str1="AbbBBABBBCCDDBBBB",*str2="BB",*str3; char s[100]; int i=0,n=0,itemp=0; int h,m,j,l,k; m=strlen(str1); h=strlen(str2); l=h; str3=str1; while(*str1!='\0') { if(*str1!=*str2) { str1++; i++; h=l; str2="BB"; } else { str1++; i++; str2++; h--; } if(h==0) { str2="BB"; h=strlen(str2); itemp=i; i=0; for(j=0;j<itemp;j++) { if(j<itemp-h) s[n++]=*str3; str3++; } } } if(h!=0) { for(j=0;j<m-itemp;j++) s[n++]=*str3++; s[n]='\0'; } puts(s);}