题目:
char arr[50]="i am a student",将arr数组中的空格填充两 个##,数组中只有一个空格。(一个空格只能填一个#,因此需要移动实现)
第一种方法:
代码展示 :
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void replace1(char* arr, char* brr, int len) {//时间复杂度o(n^2),空间复杂度o(1)
int i = 0;//从前向后找空格字符,找到空格,移动空格之后部分(整体向后移动1个单元格)
int count = 0;
for (i; i < len+count; i++) {
if (arr[i] != ' ') {
}
else {//遇到空格,整体移动
for (int j = len+count; j > i; j--) {
arr[j + 1] = arr[j];
}
count++;
arr[i] = '#';
i++;
arr[i] = '#';
}
}
}
int main() {
char arr[256] = "i am a student";
char brr[256] = "";
int len = strlen(arr);
replace1(arr,brr,len);
printf("%s", arr);
}
第二种方法:
代码展示:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void replace2(char* arr, char* brr, int len) {//时间复杂度o(n),空间复杂度o(n)
int i = 0, j = 0;
for (i, j; i <= len; i++, j++) {//i遍历arr,j遍历brr
if (arr[i] != ' ') {//if(!isblank(arr[i]))非空格 等价于前面 头文件为ctype.h
brr[j] = arr[i];
}
else {
brr[j] = '#';
j++;
brr[j] = '#';
}
}
for (int i = 0; i < j; i++) {
arr[i] = brr[i];
}
}
int main() {
char arr[256] = "i am a student";
char brr[256] = "";
int len = strlen(arr);
replace2(arr,brr,len);
printf("%s", arr);
}
第三种方法:
代码展示:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void replace3(char* arr) {//时间复杂度o(n),空间复杂度o(1)
int len = strlen(arr);
int i = len, j = len + 3;
//将3换为count来计数
for (; i >= 0; i--) {
if (arr[i] != ' ') {
arr[j] = arr[i];
j--;
}
else {
arr[j] = '#';
j--;
arr[j] = '#';
j--;
}
}
}
int main() {
char arr[256] = "i am a student";
int len = strlen(arr);
replace3(arr);
printf("%s", arr);
}