鱼C论坛

 找回密码
 立即注册
查看: 3076|回复: 6

字符串 替换

[复制链接]
发表于 2015-11-22 14:32:49 | 显示全部楼层 |阅读模式
10鱼币
输入一串 字符串。将字符串中出现的solt(不管大小写) 替代为soy sauce。

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

  1. # include <stdio.h>
  2. # include <string.h>
  3. main()
  4. {
  5.         int i,j,k,q,n=0;
  6.         char st1[100],st2[100],st3[100],st4[10]="soy sauce";
  7.         while( gets(st1) != NULL )
  8.         {
  9.                 for(i=0;st1[i] != '\0';i++)
  10.                 {
  11.                         if(st1[i] >= 65 && st1[i] <=90)
  12.                            st2[i]=st1[i]+32;
  13.             else
  14.                st2[i]=st1[i];
  15.         }  //上面代码将所有大写替代小写,方便下面查找salt
  16.         st2[i]='\0';
  17.         for(i=0;st2[i] != '\0';i++)
  18.         {
  19.                 if(st2[i]=='s' && st2[i+1]=='a' && st2[i+2]=='l' && st2[i+3]=='t')
  20.                    {   //判断

  21.                              j=i;
  22.                for(k=0;st4[k]!='\0';k++)
  23.                            {
  24.                                    st3[j]=st4[k];
  25.                                    j++;
  26.                      }   //将salt 替换
  27.                      st3[j]='\0';
  28.                      for(q=i+4;st1[q] != '\0';q++)
  29.                        {
  30.                                st3[j]=st1[q];
  31.                                j++;
  32.                         }  //将后面的字符串接上去。
  33.                        st3[j]='\0';
  34.                        printf("%s",st3);
  35.                         break;   //由于我的代码只会检查一次salt,所以后面有salt 就不会替换了
  36.                     }
  37.                    else
  38.                     st3[i]=st1[i];
  39.          }
  40.         
  41.      }                  
  42. }
复制代码

最佳答案

查看完整内容

这是尽量按照你原来的代码改的~

点评

找到你要的答案记得回来选最佳。别人帮你改了还是把鱼币给人家啊  发表于 2015-11-23 20:14
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-22 14:32:50 | 显示全部楼层
本帖最后由 康小泡 于 2015-11-23 20:13 编辑

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

  15.                 for (i = 0; st1[i] != '\0'; i++)
  16.                 {
  17.                         if (st1[i] == 's' && st1[i + 1] == 'a' && st1[i + 2] == 'l' && st1[i + 3] == 't')
  18.                         {   //判断
  19.                                 j = i + 5 * n;
  20.                                 for (k = 0; st4[k] != '\0'; k++)
  21.                                 {
  22.                                         st3[j] = st4[k];
  23.                                         j++;
  24.                                 }//将salt替换成soy sauce
  25.                                 n++;
  26.                                 i = i + 3;
  27.                         }
  28.                         else
  29.                                 st3[i + 5 * n] = st1[i];
  30.                 }
  31.                 st3[i + 5 * n] = '\0';
  32.                 printf("%s\n", st3);
  33.                 gets(st1);
  34.         }
  35.         return 0;
  36. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-22 15:02:32 | 显示全部楼层
本帖最后由 康小泡 于 2015-11-23 20:13 编辑
  1. #include <Iostream>
  2. #include <Windows.h>
  3. #include <Stdlib.h>
  4. using namespace std;

  5. #define SRC "solt"
  6. #define DES "soy sauce"
  7. int main(void)
  8. {
  9.         //缓冲区
  10.         char a[100]={0},b[100]={0};
  11.         //cin>>a;
  12.         gets(a);

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

  15.         char *p = b;

  16.         //被替换的字符串长度

  17.         for (int i = 0; i < len;i++)
  18.         {
  19.                 if( 0==strncmp(a+i,SRC,strlen(SRC)) )
  20.                 {
  21.                         strcat(b,DES);

  22.                         p+=strlen(DES);

  23.                         i+=strlen(SRC)-1;
  24.                 }
  25.                 else
  26.                 {
  27.                         *p++ = a[i];
  28.                 }

  29.         }
  30.         cout<<b;

  31.         system("Pause");
  32.         return 0;
  33. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
独一无② + 5 + 5 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-22 15:57:35 | 显示全部楼层
迷雾少年 发表于 2015-11-22 15:02
#include
#include
#include

  cout<<b;    最后这个是什么意思,我指针 学的不太好,有点不明白
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-23 12:26:29 From FishC Mobile | 显示全部楼层
独一无② 发表于 2015-11-22 15:57
cout

这个是C++的,输出b的意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-12-5 12:26:42 | 显示全部楼层
不错,不错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 13:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表