我正准备接受采访,我一直在研究练习编码问题,并且我对代码的解决方案有一些疑问。
问题是:编写一个方法来用'%20'替换字符串中的所有空格。您可以假设字符串末尾有足够的空间来容纳额外的字符,并且您可以获得字符串的实际长度。 例如:
输入:“我的狗”,6
输出:“我的%20狗”
解决方案:
void replaceSpaces(char[]str, int length){
int spaceCount = 0, newLength, i;
for(i = 0; i <length; i++){
if(str[i] == ' '){
spaceCount++;
}
}
newLength = length + spaceCount * 2;
str[newLength]= '/0';
for(i= length -1; i>=0; i--){
if(str[i] == ' '){
str[newLength - 1] = '0';
str[newLength - 2] = '2';
str[newLength - 3] = '%';
newLength = newLength - 3;
}else{
str[newLength -1] = str[i];
newLength = newLength - 1;
}
}
}
这段代码的第一个问题是我如何在主类中实现它?我想更好地了解char数组的工作原理,看看我是否可以测试这段代码。
其次,这条线意味着什么,它的目的是什么?我试图查找'/ 0'在java中的含义但却找不到任何内容:
str[newLength] = '/0';
第三,为什么我们需要在代码的后半部分从newLength中减去3,我们为%20添加空间?这是以下一行:
newLength = newLength - 3;
答案 0 :(得分:3)
这段代码的第一个问题是如何实现这个 主要课程?我想更好地了解char的确切方式 数组工作,看看我是否可以测试这段代码。
答案:您有两种选择。 1.使用像eclipse这样的工具。它为您提供了良好的UI,可以轻松地创建一个包含main()函数和调试工具的类供您观察。 2.使用System.out.println(str [i]);
在控制台中键入目标字符其次,这条线意味着什么,它的目的是什么?我试过了 查找'/ 0'在java中的含义但却找不到任何内容:
答案: / 0为NULL,这是char数组中字符串结尾的标记。它是关于记忆和结构的结构。储存方。例如,有像这样的虚拟内存“safjlasjlkasjallsjalsaf”如果代码保存你的一个字符串,如“APPLE”,它会保存在这样的某个部分。带有起始索引的“safjlasjlAPPLEllsjalsaf”。 (例如10)。这意味着变量不知道你的字符串是APPLE还是APPLEllsja ..所以\ 0在你的字符串的末尾标记为“safjlasjlAPPLE \ 0lsjalsaf”
\ 0也是一个字符,位是000000000。
第三,为什么我们需要在第二个中从newLength中减去3 我们为%20添加空间的代码的一半?这是 以下一行:
答案:该行是为了指向下一个for循环的下一个索引。由于i和newLength是指示目标索引的指针(i是源字符串,newLength是dest字符串),因此newLength应该像i一样每个循环减少1(newLength = newLength - 1;)。因为3个字符(%20)按顺序存储在dest字符串中,所以newLength应该减少3而不是1)
答案 1 :(得分:0)
解决方案int spaceCount = 0; newLength, i;
中首先出现语法错误,这不是声明
现在让我们回答你的问题
main
方法获得了类,您只需将解决方法方法复制到类中,并可能使其保持静态。使用System.out.println()
在控制台上打印您感兴趣的变量的值。并尝试修复初始错误'\0'
表示用于标识字符串结尾的空字符str
答案 2 :(得分:0)
此代码看起来像是从C或C ++转换而来,其中\ 0表示NULL。 你真正理解算法的最好方法是测试和调试它。
你可以这样试试:
public static void main(String[] args){
char array[] = new char[10];
array[10] = {'M','y',' ','d','o','g'};
replaceSpaces(array, array.length);
}
static void replaceSpaces(char[]str, int length){
int spaceCount = 0; newLength, i;
for(i = 0; i <length; i++){
if(str[i] == ' '){
spaceCount++;
}
}
newLength = length + spaceCount * 2;
str[newLength]= '/0';
for(i= length -1; i>=0; i--){
if(str[i] == ' '){
str[newLength - 1] = '0';
str[newLength - 2] = '2';
str[newLength - 3] = '%';
newLength = newLength - 3;
}else{
str[newLength -1] = str[i];
newLength = newLength - 1;
}
}
}
并添加一些System.out.println();