剑指Offer05题(字符串)
作者:互联网
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
- 第一种解法就是中规中矩地遍历数组,用一个额外的数组来装新的字符串。
char* replaceSpace(char* s){
int count = 0;
for (int i = 0; i < strlen(s); i++) {
if (s[i] == ' ')
count++;
}
char* ans = (char*)malloc(sizeof(char) * (strlen(s) + count * 2 + 1));
int i = 0, j = 0;
while (i < strlen(s)) {
if (s[i] != ' ') {
ans[j] = s[i];
i++, j++;
} else {
ans[j] = '%';
ans[j + 1] = '2';
ans[j + 2] = '0';
i++, j += 3;
}
}
ans[j] = '\0';
return ans;
}
- 题解用的C++,C++中的字符串有一些对应的方法,处理起来比C要方便不少。使用C++的话可以先将字符串扩充到所需要的大小,然后用两个指针,一个i指向原来字符串的末尾,一个j指向扩充后字符串的末尾,然后往前移动,如果i遇到字符就将i指向的字符赋给j指向的地方,然后i和j同时往前移动一个元素的距离;如果i遇到空格的话,就让j往前写%20这三个字符,然后j往前移动到%字符处(即移动两个元素的距离),再跟i一起往前移动一格;当i和j想错或相遇时,循环就结束,新的字符串也产生了。
标签:char,++,往前,Offer05,int,ans,字符串 来源: https://blog.csdn.net/weixin_44247784/article/details/118915565