2015-10-15 25 views
1

我正在準備面試,我一直在尋找練習編碼問題,並且有幾個關於代碼解決方案的問題。字符數組如何工作?

問題是:編寫一個方法用'%20'替換字符串中的所有空格。您可以假定該字符串在末尾具有足夠的空間來容納額外的字符,並且您可以獲得字符串的實際長度。 例子:

輸入: 「我的狗」,6

輸出: 「我的%20dog」

解決方案:

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; 
+2

爲什麼你不使用'String'而不是'char []'? –

+2

這看起來像試圖從C/C++複製的代碼,尤其是考慮到正在使用錯誤的空終止符(它是'\ 0',但它在Java代碼中沒有位置)的事實。 – Gimby

+0

'String newString = new String(str).replaceAll(「」,「%20」);'? – 3kings

回答

3

與此代碼第一個問題是如何將我的 主類實現這一點?我想更好地瞭解char 數組的工作原理,看看我是否可以測試此代碼。

答案:您有兩種選擇。 1.使用諸如eclipse之類的工具。它爲您提供了良好的用戶界面,可以輕鬆地爲您的觀察創建包含main()函數和調試工具的類。 2.使用System.out.println(str [i])在控制檯輸入目標字符;

其次,這是什麼意思線,什麼是它的目的是什麼?我試圖 查找什麼「/ 0」是指在Java中,但查不出:

答:/0是NULL這是在字符數組字符串的結束的標誌。它是關於內存結構&存儲方面。例如,像這樣的虛擬內存「safjlasjlkasjallsjalsaf」如果代碼保存像「APPLE」一樣的字符串,它會保存在這樣的一些部分。帶有起始索引的「safjlasjlAPPLEllsjalsaf」。 (例如10)。這意味着變量不知道你的字符串是APPLE還是APPLEllsja ..所以\ 0被標記在你的字符串的末尾,就像這樣「safjlasjlAPPLE \ 0lsjalsaf」

\ 0也是一個字符,位是000000000

第三爲什麼我們需要從第二個 的newLength中減去3,我們在%20的空間中添加的代碼的一半?這是 線以下:

答:該生產線是爲了指向下一個索引的下一個for循環。由於i和newLength是指示目標索引的指針(我是源字符串,newLength是目標字符串),newLength應該像i(newLength = newLength - 1;)那樣在每個循環中減少1。由於3個字符(%20)存儲在dest字符串sequencely,newLength應減少3而不是1)

0

有一個語法錯誤,首先在溶液int spaceCount = 0; newLength, i;它不是一個聲明 現在讓我們以您的問題

  1. 你得到了類main方法你只是複製你的解決方法的類,並可能使其爲靜態。使用System.out.println()在控制檯上打印您感興趣的變量的值。並嘗試修復最初的錯誤
  2. '\0'意味着它是用來識別字符串,因爲3個字符添加到str

PS在評論

  • 3減去結束空字符還有很大這個問題的解決方案嘗試堅持下去,而不是這一個:)祝你好運與採訪

  • 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();

    +0

    和''\ 0''爲NUL字符。 –