读书人

指针 剔除字符串

发布时间: 2012-08-01 17:53:41 作者: rapoo

指针 删除字符串
/*从键盘输入一个字符串,和一个字符,使用指针,将字符串中,这个字符出现的地方全部删除。比如:

输入的串为 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.
在此基础写会简单很多.
[解决办法]

探讨

简单问题,复杂化,楼主,真懒。

[解决办法]
C/C++ code
#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;}
[解决办法]
仅供参考
C/C++ code
#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":// 


[解决办法]

C/C++ code
#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);}
[解决办法]
C/C++ code
#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);} 

读书人网 >C语言

热点推荐