char数组如何工作?

时间:2015-10-15 14:59:40

标签: java arrays char

我正准备接受采访,我一直在研究练习编码问题,并且我对代码的解决方案有一些疑问。

问题是:编写一个方法来用'%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;

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;中首先出现语法错误,这不是声明 现在让我们回答你的问题

  1. 您使用main方法获得了类,您只需将解决方法方法复制到类中,并可能使其保持静态。使用System.out.println()在控制台上打印您感兴趣的变量的值。并尝试修复初始错误
  2. '\0'表示用于标识字符串结尾的空字符
  3. 减去
  4. 3,因为str
  5. 添加了3个字符 P.S在评论中有一个很好的解决方案,这个问题试着坚持下去而不是这个:)祝你好运面试

答案 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();