描述
请实现一个函数,将一个字符串s中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
数据范围:0≤len(s)≤1000 。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。
进阶:时间复杂度 O(n) ,空间复杂度 O(n)
示例
输入:"We Are Happy"
返回值:"We%20Are%20Happy"
输入:" "
返回值:"%20"
代码:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
public String replaceSpace (String s) {
// write code here
String str = s.replace(" ","%20");
return str;
}
}
ps:大概是沾了java的光吧,用c写一下(ps:太久没用c了)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int strLen(char s[]){
int count = 0;
char *p = s;
while(*p++!='\0'){
count++;
}
return count;
}
char* replaceSpace(char* s ) {
// write code here
int len = strLen(s);
char c[len*3+1];
char *p = &c;
int j = 0 ;
for(int i = 0 ; i < len ; i++){
if(s[i] == ' '){
*(p+j) = '/%';
*(p+j+1) = '/2';
*(p+j+2) = '/0';
j = j + 3;
continue;
}
*(p+j) = s[i];
j++;
}
// 代表最后一个字符
*(p+j) = '\0';
return p;
}
调试成功,但是测试出错。
不理解。
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int strLen(char s[]){
int count = 0;
char *p = s;
while(*p++!='\0'){
count++;
}
return count;
}
char* replaceSpace(char* s ) {
// write code here
int len = strLen(s);
if(len <= 0 || len>1000){
return "";
}
char t[len*3+1];
char *p = &t;
int j = 0 ;
for(int i = 0 ; i < len ; i++){
if(s[i] == ' '){
*(p+j) = '/%';
*(p+j+1) = '/2';
*(p+j+2) = 48;
j = j + 3;
}else{
*(p+j) = s[i];
j++;
}
}
// 代表最后一个字符
*(p+j) = '\0';
j++;
char val[j];
char *str = &val;
int i = 0;
while(i < j){
*(str+i) = *(p+i);
i++;
}
*(str+i) = 0;
return str;
}
重新赋值就ok了。但是数组一多出现乱码现象。