请实现一个函数,把字符串中的每个空格换成20%

来源:互联网 发布:linux cp 查看进度 编辑:程序博客网 时间:2024/06/07 01:52





#include<stdio.h>#include<stdlib.h>#include<string>void ReplaceBlank(char arr[]){int  len = strlen(arr); if (arr == NULL&&len <= 0)  //临界条件return;int BlankCount = 0;  for (int i = 0; i < len; i++){if (arr[i] == ' ')++BlankCount;   //计算空格的个数}int newLen = len + 2 * BlankCount;  //新的数组的长度while (len != newLen)      {//从后向前if (arr[len] == ' ')     //因为是从后向前插入,所以倒着插入数据{arr[newLen--] = '0';   arr[newLen--] = '2';arr[newLen--] = '%';}else  //如果不是空格,就把数据项后挪{arr[newLen--] = arr[len];}len--;    //1.公共部分提取出来2.替换后也要减原长度,不替换时也要减,所以提取出来}}int main(){char arr[20] = "we are happy";  //原来的数组长度记得要大于改变后的长度,不然会越界访问。ReplaceBlank(arr);printf("%s\n", arr);system("pause");return 0;}



方法二:(书上的)

#include<iostream>using namespace std;#include<string>void ReplaceBlank(char string[], int length){if (string == NULL&& length <= 0)return;int originalLength = 0;int numberOfBlank = 0;int i = 0;while (string[i] != '\0'){++originalLength;if (string[i] == ' ')++numberOfBlank;++i;}int newLength = originalLength + numberOfBlank * 2;if (newLength <length)return;int indexOfOriginal = originalLength;int indexOfNew = newLength;while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){if (string[indexOfOriginal] == ' '){string[indexOfNew--] = '0';string[indexOfNew--] = '2';string[indexOfNew--] = '%';}else{string[indexOfNew--] = string[indexOfOriginal];}--indexOfOriginal;}}int main(){char arr[20] = "we are happy";int len = strlen(arr);ReplaceBlank(arr, len);cout << arr << endl;system("pause");return 0;}




1 0