剑指offer 面试题4 替换空格

来源:互联网 发布:pc装机必备软件 编辑:程序博客网 时间:2024/05/16 11:24

E:\arithmetic\BlankTo

复杂度O(n)

#include <stdio.h>#include <string.h>void blankToSymbol(char a[]);int main(int argc, char *argv[]){/*测试用例:a)功能测试; b,c,d,e,f)特殊值(空格在开头,在结尾, 连续两个空格,全空格,没空格);g)负面测试 (空字符串)*/ char a[80] = "we are happy";char b[80] = " we are happy";char c[80] = "we are happy ";char d[80] = "we  are happy";char e[80] = "   ";char f[80] = "weare";char *g = NULL; blankToSymbol(a);blankToSymbol(b);blankToSymbol(c);blankToSymbol(d);blankToSymbol(e);blankToSymbol(f);blankToSymbol(g);return 0;}void blankToSymbol(char a[]){//长度不用给 ,自己求 if(a == NULL) {//增强鲁棒性 printf("blank to symbol failed!\n");return;}int i, j;int cntZero = 0;int length = 0;//字符串长度,不算\0 for(i=0 ; a[i]!='\0' ; i++){length++;if(a[i] == ' '){cntZero++;}}for(i=length, j = length+cntZero*2 ; i>=0,j>=0 ; i--, j--){//计算公式别写错 ,i取到length,即\0 if(a[i] != ' '){a[j] = a[i];}else{a[j--] = '0';a[j--] = '2';a[j] = '%';}}printf("%d\n%s\n", strlen(a), a);}


0 0