当前位置:网站首页>C语言一维数组练习——将一个字符串中的某个字符替换成其它字符
C语言一维数组练习——将一个字符串中的某个字符替换成其它字符
2022-08-02 14:02:00 【iccoke】
将一个字符串中的空格换成#号
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<assert.h>
//空格替换
void addcharactr(char* crr, char c, int len) {
assert(crr != NULL );
for (int i = 0; i < len-1 ; i++) {
if (crr[i] == ' ') {
crr[i] = c;
}
}
}
int main() {
char crr[100] = "i am a student";
char c = '#';
int len = strlen(crr);
addcharactr(crr, c,len);
for (int i = 0; i <len; i++) {
printf("%c", crr[i]);
}
return 0;
}当用 i am a student 作为测试用例时,结果如下

得到结果如下,其中strlen和字符串的输入方式的使用可以参考以下链接
https://blog.csdn.net/iccoke/article/details/125911524?spm=1001.2014.3001.5502
将一个字符串中的空格替换为两个#号
这里首先要想到的是这里涉及到了元素的移动问题,我们这里的初步想法是从o号下标遍历数组,当遇到空格时,将后面的所有元素全部移动到后一位,这样空格处和后一处就有两个空格,然后依次填入两个#即可,但是在移动数据时首先应该考虑是否会在移动元素的过程中产生越界导致的程序崩溃发生。
具体代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<assert.h>
//空格替换
void addcharactr(char* crr, char c, int m, int len) {
assert(crr != NULL && m <= len);
int len1 = len + m;
for (int i = 0; i < len1-1 ; i++) {
if (crr[i] == ' ') {
for (int j = len1-1; j >= i + 1; j--) {
crr[j + 1] = crr[j];
}
crr[i] = c;
crr[i + 1] = c;
}
}
}
int main() {
char crr[100] = "i am a student";
char c = '#';
int len = strlen(crr);
int m = 3;
addcharactr(crr, c,m,len);
for (int i = 0; i <len+m; i++) {
printf("%c", crr[i]);
}
return 0;
}依旧以i am a student 作为测试用例
结果为

可以看到以上代码可以实现题目需求,但是我们观察代码不难发现,代码的时间复杂度很高,所以我们要对代码进行优化
时间复杂度相关知识
https://blog.csdn.net/iccoke/article/details/125907349?spm=1001.2014.3001.5502
优化后代码如下
int getcount(char* arr,int len,char c) {
assert(arr != NULL);
int count = 0;
for (int i = 0; i < len; i++) {
if (arr[i] == c) {
count++;
}
}
return count;
}
void addcharcater(char* arr,char c,int len,char b) {
assert(arr != NULL);
int count = getcount(arr, len, c);
int i = len; int j = i + count;
while (i != j) {
if (arr[i] != c) {
arr[j--] = arr[i--];
}
else
{
arr[j--] = b;
arr[j--] = b;
i--;
}
}
}
int main() {
char arr[100] = "i am a student";
int len = strlen(arr);
char c = ' ';
char b = '#';
addcharcater(arr, c, len, b);
printf("%s", arr);
}相比较第一次的代码,这段代码的时间复杂度就小了很多
但是为了能够适用更多的情况,比如将一个字符串中的某个字符替换为其他n个字符这样比较普通的情况,我们要进行进一步的优化
int getcount(char* arr,int len,char c) {
assert(arr != NULL);
int count = 0;
for (int i = 0; i < len; i++) {
if (arr[i] == c) {
count++;
}
}
return count;
}
void addcharcater(char* arr,char c,int len,char b,int num) {
assert(arr != NULL);
int count = getcount(arr, len, c);
int i = len; int j = i + count*(num-1);
while (i != j) {
if (arr[i] != c) {
arr[j--] = arr[i--];
}
else
{
for (int z = 0; z < num; z++) {
arr[j--] = b;
}
i--;
}
}
}
int main() {
char arr[100] = "i am a student";
int len = strlen(arr);
char c = 'a';
char b = '!';
addcharcater(arr, c, len, b,5);
printf("%s", arr);
}用将字符串中的a换成五个!作为测试用例
结果如下

边栏推荐
- verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第七章)
- 8580 Merge linked list
- jwt (json web token)
- 深度学习框架pytorch快速开发与实战chapter3
- 第十一单元 序列化器
- Flask contexts, blueprints and Flask-RESTful
- Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id ‘c
- 动手学ocr(一)
- Camera Hal(Hal3)层修改Preview流
- Error Correction Design Principle of Hamming Check Code
猜你喜欢
![[ROS] (01) Create ROS workspace](/img/2a/11e5023ef6d052d98b4090d2eea017.png)
[ROS] (01) Create ROS workspace
![[ROS] (05) ROS Communication - Node, Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)
[ROS] (05) ROS Communication - Node, Nodes & Master

第十一单元 序列化器

Hands-on OCR (1)

c语言用scanf出错不安全的解决办法

Deep learning framework pytorch rapid development and actual combat chapter3

What's wrong with running yolov5 (1) p, r, map are all 0

8580 合并链表

动手学ocr(一)

Camera Hal(Hal3)层修改Preview流
随机推荐
drf路由组件Routers
drf source code analysis and global catch exception
宏定义问题记录day2
drf view component
Raj delivery notes - separation 第08 speak, speaking, reading and writing
第六单元 初识ORM
MarkDown syntax summary
Unit 14 Viewsets and Routing
jwt(json web token)
关于密码加密的一点思路
Unit 3 view layer
Deep learning framework pytorch rapid development and actual combat chapter3
[ROS] (04) Detailed explanation of package.xml
Sentinel源码(三)slot解析
Flask-RESTful请求响应与SQLAlchemy基础
Basic operations of 8583 sequential stack
[ROS](03)CMakeLists.txt详解
STM32 (F407) - stack
Unit 6 meet ORM
Go语言初始