C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’

执行替换规则的前后:"i am a student" -> "i##am##a##student"

 

首先要明确的问题是:在字符串已经给定的情况下,如何对字符串中的空格进行字符替换?

这个问题可以分为几部分,分步来进行分析最终逐步进行解决:

一:让计算机对已经存在的字符串进行扫描,并且识别出空格字符

二:识别出空格字符后,如何将‘##’与‘ ’进行替换

三:替换后让计算机直接进行输出

思路:我们可以直接创建一个大数组用来存放替换空格和“##”后的字符串,使用一个下标创建对原数组(原字符串)的循环体,从而进行对原数组的扫描,当下标扫描每一个字符时,只要下标所对应的字符不为空格,直接将字符传送进大数组中;使用j对大数组进行扫描,如果i下标对应的字符是空格的话,则直接将大数组中j下标对应的位置替换为‘##’,步骤执行结束之后直接对大数组进行输出。

分析完成,将思路代码化:

//字符替换问题,将字符串中的空格替换为## 1个‘ ’替换成两个‘##’
//str -> i am a student aim -> i##am##a##student
//思路:开辟一个数组,使用i下标对str数组进行扫描,使用j下标对aim数组进行扫描
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *Replace(char *str,char *aim,int strlen)//定义替换函数
{
    assert(str != NULL && aim != NULL && strlen > 0);//断言式
    int i = 0,j = 0;//定义两个下标,i下标对原str数组进行遍历,j对aim数组进行遍历
    while(i < strlen){
        if(str[i] != ' '){//当前位置不是空格的情况下
            aim[j++] = str[i++];//先用变量的值,然后自增
            /*
            此处语句的意思是这几句子合并之后的句子:
            aim[j] = str[j];
            i++;
            j++
            */
        }
        else{//当前位置为空格
        aim[j++] = '#';
        aim[j++] = '#';
        i++;
        /*
        此处语句的意思是这几句子合并之后的句子:
            aim[j] = '#';
            j++;
            aim[j] = '#';
            j++;
            i++;
        */    
        }
    }
    return aim;
}
int main()
{
    char str[] = "i am a student";//定义字符数组
    printf("替换前的字符串为:%s",str);
    char aim[256] = {0};
    int len = sizeof(str) / sizeof(str[0]);
    Replace(str,aim,len);//调用替换函数
    printf("\n替换后的字符串为:%s",aim);//直接对aim字符串进行输出
    return 0;
}

如图所示为运行结果:

输出完成

如图,替换已完成。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ritchie_Zeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值