牛客剑指OFFER JZ2 替换空格

tech2024-10-19  12

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路1: 从头开始 1、新建一个数组p,从头开始遍历原数组str 2、若str中某位置数据不为空格,则p中对应位置改为该数据 3、若str中某位置数据为空格,则p中对应位置改为%20,可用strcat代劳 4、最后把p中内容拷到str中,用strcpy 优点:简单好想。

void replaceSpace(char *str,int length) { int l = 3*length; char p[l]; memset(p, 0, l); int j=0; for(int i=0; i<length; i++) { if(str[i] != ' ') { p[j] = str[i]; j++; } else { strcat(p,"%20"); j += 3; } } p[j] = '\0'; strcpy(str,p); }

思路2: 从尾开始 1、先遍历一遍数组str,统计数组长度 i 与空格数量 n_space,则新数组长度 cnt = i + 2*n_space 2、利用 i 从str数组未尾开始遍历,直接把改动加在str上 3、若str中某位置数据不为空格,则str中对应位置改为该数据 4、若str中某位置数据为空格,则str中对应位置改为%20 优点:占用空间小

void replaceSpace(char *str,int length) { if(str == NULL) return; int i = 0 , n_space = 0; while( str[i]) { if(str[i] == ' ') { n_space++; } i++; } int cnt = i+2*n_space; // 求新数组长度 cnt str[cnt] = '\0'; // str末尾补个'\0' while(i && cnt > i) // cnt = i 时说明 接下来已经没有空格了,保持原样即可,提高速度 { if(str[--i] != ' ') { str[--cnt] = str[i]; } else { str[--cnt] = '0'; str[--cnt] = '2'; str[--cnt] = '%'; } } }
最新回复(0)