2011-07-12 141 views
0

給定一個可變長度的字符串數組,打印陣列中每個元素的長度。爲陣列的每個元素打印陣列長度

例如,給定:

string[] ex = {"abc", "adf", "df", "ergd", "adfdfd"); 

輸出應爲:

我考慮

一種可能性是使用鏈表來保存每個字符串的長度,並在插入時進行排序並最終顯示結果。

有效解決此問題的其他建議?

+2

我不明白你是如何從該陣列獲得2 3 4 6。陣列中有五個元素,不應該是3 3 2 4 6? – bdonlan

+0

@bdonlan我們需要對它進行排序並避免重複。我們只需要顯示可變長度而不需要重複。 – find

+1

這是你的任務嗎? – dpp

回答

-1

根據不同的語言,最簡單的方法可能是通過使用該陣列來迭代for循環

for (i=0;i<array.length;i++){ 
    print array[i].length; 
} 

你需要打印出來,以便?

+0

來解決這個問題,我們需要按順序打印它們,而不是重複? – find

+0

一個好的,在這種情況下,忽略我的答案,並做勞倫斯說的話 –

3

每當你想保持一個截然不同的東西(即:過濾出重複的東西),你可能想要一個集合。

存儲集有很多不同的數據結構。其中一些,如搜索樹,也會爲您「排序」這些值。您可以嘗試使用多種形式的二叉搜索樹中的一種。

1

你現在正在做什麼(或給定的答案)被稱爲插入排序。它基本上比較插入字符串的字符串到插入的長度。之後,在打印時,字符串到打印的長度(在當前指針處)將與其之前和之後的字符串的長度進行比較,如果長度相同,則不要打印!

另一種方法是,冒泡排序,它會在同一時間兩個字符串進行排序,排序,然後移動到下一個字符串...

印刷是在你的程序中最重要的組成部分,不管是什麼你使用的排序算法,沒關係。

下面是冒泡排序和打印處理的算法,它是VB所以只是把它轉換...

Dim YourString(4) As String 
    YourString(0) = "12345" 'Will not be printed 
    YourString(1) = "12345" 'Will not be printed 
    YourString(2) = "123" 'Will be printed 
    YourString(3) = "1234" 'Will be printed 

    Dim RoundLimit As Integer = YourString.Length - 2 

    'Outer loop for how many times we will sort the whole array... 
    For CycleCounter = 0 To RoundLimit 
     Dim CompareCounter As Integer 

     'Inner loop to compare strings... 
     For CompareCounter = 0 To RoundLimit - CycleCounter - 1 

      'Compare lengths... If the first is greater, sort! Note: this is ascending 
      If YourString(CompareCounter).Length > YourString(CompareCounter + 1).Length Then 
       'Sorting process... 
       Dim TempString = YourString(CompareCounter) 
       YourString(CompareCounter) = YourString(CompareCounter + 1) 
       YourString(CompareCounter + 1) = TempString 
      End If 

     Next 
    Next 

    'Cycles = Array length - 2 , so we have 2 cycles here 
    'First Cycle!!! 
    '"12345","12345","123","1234" Compare 1: index 0 and 1 no changes 
    '"12345","123","12345","1234" Compare 2: index 1 and 2 changed 
    '"12345","123","1234","12345" Compare 3: index 2 and 3 changed 
    'Second Cycle!!! 
    '"123","12345","1234","12345" Compare 1: index 0 and 1 changed 
    '"123","1234","12345","12345" Compare 2: index 1 and 2 changed 
    '"123","1234","12345","12345" Compare 3: index 2 and 3 no changes 
    'No more cycle! 

    'Now print it! Or use messagebox... 


    Dim CompareLimit As Integer = YourString.Length - 2 

    For CycleCounter = 0 To CompareLimit 
     'If length is equal to next string or the preceeding string, do not print... 

     If ((CycleCounter - 1) <> -1) Then 'Check if index exist 
      If YourString(CycleCounter).Length = YourString(CycleCounter - 1).Length Then 
       Continue For 'The length is not unique, exit compare, go to next iteration... 
      End If 
     End If 

     If ((CycleCounter + 1) <> YourString.Length - 1) Then 'Check if index exist 
      If YourString(CycleCounter).Length = YourString(CycleCounter + 1).Length Then 
       Continue For 'The length is not unique, exit compare, go to next iteration... 
      End If 
     End If 

     'All test passed, the length is unique, show a dialog! 
     MsgBox(YourString(CycleCounter)) 
    Next 
1

的規定並沒有說明排序或刪除結果中重複的任何問題。只有給定的輸出暗示排序和重複刪除。它沒有提到關於速度或空間優化或可維護性的任何說明。

因此真的沒有足夠的信息來獲得「最佳」解決方案。

如果你想要一個能在大多數語言中工作的解決方案,你可能應該堅持使用一個數組。將長度放入一個新數組中,對其進行排序,然後打印一個循環,該循環記住最後一個值以跳過重複項。我不想用一種無法應付的語言。

如果指定了某種語言,則可能可以利用集合或關聯數組類型數據結構來自動處理重複項和/或排序。例如。,在Java中你可以選擇一個集合類,它會自動忽略重複項排序,並且你可以構建你的代碼,這樣一行改變使用不同的類會讓你保持重複或不排序。如果您使用的是C#你很可能寫了整個事情作爲一個行LINQ語句...

1

這裏是一個C++的解決方案:

#include <set> 
#include <vector> 
#include <string> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    string strarr[] = {"abc", "adf", "df", "ergd", "adfsgf"}; 
    vector<string> vstr(strarr, strarr + 5); 
    set<size_t> s; 

    for (size_t i = 0; i < vstr.size(); i++) 
    { 
    s.insert(vstr[i].size()); 
    } 

    for (set<size_t>::iterator ii = s.begin(); ii != s.end(); ii++) 
    cout << *ii << " "; 
    cout << endl; 

    return 0; 
} 

輸出:

$ g++ -o set-str set-str.cpp 
$ ./set-str 
2 3 4 6 

一個set因爲(引自here):

套件是一種關聯容器tha t存儲獨特的元素, ,其中元素本身就是關鍵。

關聯容器是特別設計成 效率可以通過鍵訪問它的元素的容器(不像序列 容器,這是通過它們的 相對或絕對位置更有效的存取元件)。

在內部,集合中的元素總是按照設置在 容器構造上的特定的嚴格弱排序標準,從低到高排序爲 。

集合通常實現爲二叉查找樹。

以及有關vector詳見hereherestring