2012-02-21 70 views
1

我試圖編寫一個程序來查找字符數組中的字符串,並隨機輸出字符串以及輸出字符串的數量和長度。我似乎遇到的麻煩是挑選了長度。我不確定是否應該使用存儲在註釋中的長度(如果它甚至可以這樣做),或者計算每個字符並以這種方式輸出長度。我不確定如何做到這一點。計算字符數組中的一行中的字符數

char * strings [] ={ 

// String 1 of 5000: Length = 185 
"J1{GW3_%-3s_%p*E<ed<qLB#YHN%S8.odr5|[QPz&Hslk#3vi[)T3wgh3lHdVtTGz|M1RsGy_r=J]Rgp`0+s)pbvpm<u'8NsPX:Uk)kU,[email protected][{2efjt*z_`eOqa#iP3z)T<(eYWb%W{5g?ynp*<jfEeLUA5:ukgvw$Le,Yjv*o{a/,tV#dG1|+D", 

// String 2 of 5000: Length = 9 
"^PuU]gjh)", 

} 

現在,我使用rand函數輸出5000個字符串到輸出文件,像這樣

outfile1 << strings[rand()%5000] << endl; 

這個函數嵌套在一個循環中,它似乎輸出它隨機的,但它每次都是相同的隨機模式,所以也許我應該以不同的方式播種rand函數。

無論如何,當顯示輸出文件中每個字符串的長度時,我真的很失落。有沒有人對我如何做到這一點有任何建議?這是作業,所以我想了解如何應用這些信息,而不是直接的答案。 :)

截至目前我的輸出是這樣的:

#11 (Length:168) - JZn'TGF&#K=EohoZT 
#12 (Length:189) - DiF9ao^T,7rtQ#Yc>n{_YIG_y 
#13 (Length:50) - y,|l2;hA;H;pHz?|jLADh 

正如你所看到的,字符串輸出正確但長度不正確。

+0

爲什麼你不能提取字符串並使用'string :: size()'或簡單的'strlen()'? – iammilind 2012-02-21 03:51:00

+0

我正在研究這兩個現在,並試圖找出如何在這裏應用它。 :) – Hydlide 2012-02-21 03:53:06

+0

你能讓我們知道你的作業問題的確切措辭嗎? – 2012-02-21 05:04:26

回答

0

///更新答案//

我想你想要做的是輸出數組中的每個字符串,並計算出每個它們的長度嗎???我寫了這個快速程序,它運行良好。

char* strings[] = {"hellothisistom", "nicetomeetyou"}; 

for (int i = 0; i<2; i++) 
{ 
    int k = rand()%2; 
    cout<< strings[k] << endl; 
    cout<< strlen(strings[k])<<endl; 

} 

您可以用您的輸出文件字符串替換cout。 請確保您使用相同的k來獲得字符串和長度!

////////////////////////////////////////////// //

字符是一比特的字符,如 'A', 'b', '%' 等 甲字符串是簡單的字符陣列。 另一方面,字符串是代表一系列字符的特殊類。

字符串,像一個普通陣列。 在你的情況下,strings(這是一個字符數組),你可以使用sizeof(strings)/sizeof(strings[0])找出字符數。

至於你提到的那個字符串是由許多短的字符串。除非有一些特殊字符將單詞分開,否則將字符串分隔成單詞是沒有辦法的(至少不是簡單的方法)。

例如,如果你的字符串是hellothisistom。除非你進入自然語言處理,否則沒有辦法分開單詞。 如果你的字符串像hello/this/is/tom,有些東西可以分開單個單詞,那麼你可以使用多種方法來提取單詞。您可以查看下面的網站,瞭解您可以使用的工具。 http://www.cplusplus.com/reference/clibrary/cstring/

例如,在循環中,您可以搜索該特殊字符的第一個匹配項,然後搜索該特殊字符。然後,您只需複製其中的字符,輸出這些字符和大小(使用上述方法)。然後轉到下一個。

當你輸出stings[rand()%5000]時,strings裏面會不會有一堆隨機字符?

+0

我的輸出文件按隨機順序列出了每個不帶引號的「字符串」,當然也跳過註釋。這部分工作正常。我已經做了sizeof,它表明數組本身由5000行組成。其實我正在試驗和使用「\t \t \t \t outfile1 << strlen(strings [rand()%5000]);」並且它最終按照我希望它在顯示長度方面做了什麼,但是它是任意的並且不顯示我要求的長度(例如30個字符的字符串顯示爲57),這很可能是因爲rand功能,但我認爲我越來越接近了! – Hydlide 2012-02-21 05:02:26

+0

我不認爲它實際上正在做你想做的事情。 你是如何啓動字符串的?根據你發佈的內容,'char * strings [] = {....}'不起作用!如果您嘗試輸出這些字符,它將只是隨機值(不是您創建的那些),因爲它們是尚未分配的內存空間。 查看本網站以瞭解如何正確實例化字符數組。 http://www.cplusplus.com/doc/tutorial/ntcs/ 爲什麼不嘗試使用一個簡短的字符串數組,你知道它裏面有什麼? – tuzzer 2012-02-21 05:20:22

+0

我想我的描述可能會誤導你。請再檢查一次,也許現在會更有意義。我的代碼有5000行,並且它們都使用rand函數完美地輸出。怎麼樣?我不知道,但它經過多次測試後確實有效。我覺得我正在學習碎片,這絕對不是好笑,但我正在學習。 – Hydlide 2012-02-21 05:26:45

0

你最終會解決什麼問題,你是否試圖解析數據?

我不明白這'在字符數組中找到字符串並隨機輸出字符串';你必須知道char數組可以被理解爲一個巨大的字符串,那麼你是否在尋找特殊的分隔符,並且你想要返回所有有效匹配的列表?

如果是這樣,你如何區分源碼中有效的字符串和隨機的東西之間的區別;應該劃定界限嗎?

如何隨機輸出字符串?

請添加一些關於您正在嘗試解決的問題以及您正在處理的數據的詳細信息。

+0

是的,當我說「字符串」時,這個數據在字符數組中,我的意思是如上所示的一串隨機字符。我不確定在使用字符數組時,如果使用string :: size()或任何其他變體都可以工作,那麼可能使用像您說的那樣的分隔符會使得更多。我的程序需要計算引號之間的字符,併爲每個輸出吐出。那件事是我遇到的最大麻煩。 – Hydlide 2012-02-21 04:09:13

0

str.size()其中str是您的字符串變量將輸出字符串的長度

0
  1. 函數srand(時間(0));

的標準方法產生像樣的僞隨機數。 'srand'根據函數中傳遞的數字指定種子,而'time(0)'將每秒返回不同的數字,所以這應該解決您的'相同模式'問題。

  1. a)你可以使用strlen

    b)或你可以簡單地編寫一個函數,將通過串檢查0(0每個字符 - 行尾),然後返回當前迭代值。

+0

我會稍微玩一下播種。我以前做過,但沒有一段時間。謝謝。 :) – Hydlide 2012-02-21 04:11:35

+0

是的,它很好。謝謝。仍然在處理我的其他問題,但我到了那裏! – Hydlide 2012-02-21 04:14:16

+0

不客氣:) – 2012-02-21 08:16:56