String 面试谜语(字符串操纵)-需要解释

String 面试谜语(字符串操纵)-需要解释,string,memory-management,String,Memory Management,我正在准备面试,遇到了一个问题+解决方案。 我对解决方案中的一行有问题,希望这里有人能解释一下 问题是: 编写一个方法,用“%20”替换字符串中的所有空格 解决方案: public static void ReplaceFun(char[] str, int length) { int spaceCount = 0, newLength, i = 0; for (i = 0; i < length; i++) { if (str[i] == ‘ ‘) {

我正在准备面试,遇到了一个问题+解决方案。 我对解决方案中的一行有问题,希望这里有人能解释一下

问题是:

编写一个方法,用“%20”替换字符串中的所有空格

解决方案:

public static void ReplaceFun(char[] str, int length) {
    int spaceCount = 0, newLength, i = 0;
    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;
        }
    }
}
publicstaticvoidreplacefun(char[]str,int-length){
int spaceCount=0,newLength,i=0;
对于(i=0;i=0;i--){
如果(str[i]=''){
str[newLength-1]=“0”;
str[newLength-2]=“2”;
str[newLength-3]='%';
newLength=newLength-3;
}否则{
str[newLength-1]=str[i];
newLength=newLength-1;
}
}
}
我的问题是9号线。他怎么能将str[newLength]设置为“\0”?或者换句话说,他如何在不首先分配内存或类似的情况下接管所需的内存量?
他不是在回忆吗

假设这实际上是在C中(
private static
不是有效的C或C++),它们不能,正如它所写的那样。他们从不分配新的
str
,它的长度足以容纳旧字符串和
%20
扩展


我怀疑这个问题还有一个额外的部分,那就是
str
已经足够长,可以容纳扩展的
%20
数据,
length
str
中字符串的长度,不包括零终止符。

假设这实际上是在C中(
private static
不是有效的C或C++),正如所写的那样,它们不能。它们从不分配一个新的
str
,它的长度足以容纳旧字符串和
%20
扩展


我怀疑这个问题还有一个额外的部分,那就是
str
已经足够长,可以容纳扩展的
%20
数据,
length
str
中字符串的长度,不包括零终止符。

这是有效的代码,但不是好的代码。你完全正确您评估我们正在覆盖初始str[]的边界。这可能会导致一些不必要的副作用,具体取决于被覆盖的内容。

这是有效代码,但不是好代码。您评估我们正在覆盖初始str[]的边界是完全正确的。这可能会导致一些不必要的副作用,具体取决于被覆盖的内容。

您似乎是正确的。这将导致未定义的行为,因为它们将写入未分配的内存。除非它们分配的空间比字符串实际占用的空间大得多。您必须假设它们在该f之外这样做你的函数可能在你的练习中假设你的数组足够大。如果不是,你就遇到了麻烦。THEVER既不是C也不是C++。函数的形体看起来像C(因此C++)。但是,声明不需要。函数如何实现它的目标取决于接口,尽管标记C++和C,代码是java还是C++?请选择一种语言!<代码>公共静态< /代码>不是有效的C或C++。代码也有智能引用……你似乎是正确的。这将导致未定义的行为,因为它们将是WR。除非内存分配了比字符串实际占用的空间更多的空间,否则你必须假设它们在这个函数之外进行了这个工作。你的函数可能假设你的数组中的数组足够大。如果不是,你就遇到了麻烦。C++代码既不是C也不是C++。函数L的主体。OC类似C(因此C++),但声明不DOOR。函数如何实现它的目标取决于接口,尽管。标记C++和C,代码是java还是C++?请选择一种语言!<代码>公共静态< /代码>不是有效的C或C++。代码也有智能引用…