独一无② 发表于 2015-11-22 14:32:49

字符串 替换

输入一串 字符串。将字符串中出现的solt(不管大小写) 替代为soy sauce。

我的问题,我的代码只能代替第一次出现的salt,后面出现就不会替代了。
最好可以在我的代码上修改,谢谢~

# include <stdio.h>
# include <string.h>
main()
{
        int i,j,k,q,n=0;
        char st1,st2,st3,st4="soy sauce";
        while( gets(st1) != NULL )
        {
                for(i=0;st1 != '\0';i++)
                {
                        if(st1 >= 65 && st1 <=90)
                           st2=st1+32;
            else
               st2=st1;
      }//上面代码将所有大写替代小写,方便下面查找salt
      st2='\0';
      for(i=0;st2 != '\0';i++)
      {
              if(st2=='s' && st2=='a' && st2=='l' && st2=='t')
                 {   //判断

                           j=i;
               for(k=0;st4!='\0';k++)
                           {
                                   st3=st4;
                                   j++;
                   }   //将salt 替换
                   st3='\0';
                   for(q=i+4;st1 != '\0';q++)
                   {
                               st3=st1;
                               j++;
                      }//将后面的字符串接上去。
                       st3='\0';
                       printf("%s",st3);
                      break;   //由于我的代码只会检查一次salt,所以后面有salt 就不会替换了
                    }
                   else
                    st3=st1;
         }
      
   }                  
}

0xcc 发表于 2015-11-22 14:32:50

本帖最后由 康小泡 于 2015-11-23 20:13 编辑

这是尽量按照你原来的代码改的~
# include <stdio.h>
# include <string.h>
int main()
{
        int i, j, k, n;
        char st1 = { 0 }, st3, st4 = "soy sauce";
        gets(st1);
        while (st1 != '\0')
        {
                n = 0;//发生替换的次数
               
                for (i = 0; st1 != '\0'; i++)//将大写替换成小写(原地改就行,不用转存到st2,这样比较省空间)
                        if (st1 >= 65 && st1 <= 90)
                                st1 = st1 + 32;

                for (i = 0; st1 != '\0'; i++)
                {
                        if (st1 == 's' && st1 == 'a' && st1 == 'l' && st1 == 't')
                        {   //判断
                                j = i + 5 * n;
                                for (k = 0; st4 != '\0'; k++)
                                {
                                        st3 = st4;
                                        j++;
                                }//将salt替换成soy sauce
                                n++;
                                i = i + 3;
                        }
                        else
                                st3 = st1;
                }
                st3 = '\0';
                printf("%s\n", st3);
                gets(st1);
        }
        return 0;
}

迷雾少年 发表于 2015-11-22 15:02:32

本帖最后由 康小泡 于 2015-11-23 20:13 编辑

#include <Iostream>
#include <Windows.h>
#include <Stdlib.h>
using namespace std;

#define SRC "solt"
#define DES "soy sauce"
int main(void)
{
        //缓冲区
        char a={0},b={0};
        //cin>>a;
        gets(a);

        //缓冲区长度
        int len = strlen(a);

        char *p = b;

        //被替换的字符串长度

        for (int i = 0; i < len;i++)
        {
                if( 0==strncmp(a+i,SRC,strlen(SRC)) )
                {
                        strcat(b,DES);

                        p+=strlen(DES);

                        i+=strlen(SRC)-1;
                }
                else
                {
                        *p++ = a;
                }

        }
        cout<<b;

        system("Pause");
        return 0;
}

独一无② 发表于 2015-11-22 15:57:35

迷雾少年 发表于 2015-11-22 15:02
#include
#include
#include


cout<<b;    最后这个是什么意思,我指针 学的不太好,有点不明白

迷雾少年 发表于 2015-11-23 12:26:29

独一无② 发表于 2015-11-22 15:57
cout

这个是C++的,输出b的意思

鱼C工作室.YCGZS 发表于 2015-12-5 12:26:42

不错,不错
页: [1]
查看完整版本: 字符串 替换