用c語言怎麼實現把乙個檔案中所有的字串進行篩選,重複的字串只留下乙個?

時間 2021-05-29 23:35:53

1樓:NoneType

deffunction

(file,/

):return"".

join

(set

(file

))print

(function

(open

(file_name)))

2樓:luoxing123

C語言的微笑由我來守護, show you my bug:

#include

#include

#include

#include

typedef struct WordSet WordSetT;

WordSetT* set_new()

void set_insert(WordSetT* set, char* v)

void set_delete(WordSetT* set)int main(int argc, char** argv)

3樓:

有三個思路:(先假設檔案中字串按行劃分)第一種,逐個讀取字串並寫入新檔案,寫入前與已寫入的作對比strcmp,若相同就不寫;

第二種,將字串化為Hash值,寫入前與已寫入的字串的Hash值對比,若相同就不寫;

第三種,逐個讀取字串並將其轉化到同一棵節點為字元的樹上,最後遍歷樹得出所有串。

4樓:Ming

純粹的C語言太久沒用我都忘記了,我來提供乙個lua的版本,大家有空再翻譯成C語言好了:

local file, err = io.open("in.txt")

if not err then

local outfile = io.open("out.txt", "w+")

local tAllNames = {}

for line in io.lines(sFileFullName) do

if not tAllNames[line] then

tAllNames[line] = true

outfile:write(line .. "\n")

endendend真實專案用過的,臨時改了下,不要在意報錯細節。。。(逃

5樓:遊冥客

純粹的C語言太久沒用我都忘記了,搞個 C++ 的吧:

#include

#include

#include

#include

using

namespace

std;

intmain

()for

(autos:

container

)return0;}

6樓:fairlyblank

說的好像c不能調介面一樣。

Set* set = newSet();

while (fgets(buffer, sizeof(buffer), file_in) != NULL)

}// TODO: set.c

7樓:

準備排序(或者做字典)後再遍歷輸出。然而要給出最優的演算法,我們得先了解使用的場景:要處理的文字檔案有多大?

能一次性讀入記憶體做排序嗎?文字檔案中的字串有多少種類?是可列舉的嗎?

做成字典記憶體裡能存下嗎?希望演算法占用更少的記憶體還是執行得更快?最後這個問題最好能給出量化的答案。

8樓:田雅夫

純粹的C語言太久沒用我都忘記了,我也沒接觸過Haskell. 用乙個半小時學了一下Haskell的基本語法, 我來提供乙個Haskell的版本,大家有空再翻譯成C語言好了:)

module

Main

where

import

System.IO

import

Control.Monad

import

Data.List

main=do

letlist=

handle

<-openFile

"test.txt"

ReadMode

contents

<-hGetContents

handle

letsinglewords

=words

contents

letlist

=nub

singlewords

print

list

hClose

handle

9樓:Subray

我怎麼覺得你們說的有問題呢。

乙個檔案中重複的字串怎麼定義。如果是存在分隔符,以分隔符分隔檔案內容的結果是需要去重的集合,那麼應該先按照分隔符切割在按照其他各位巨巨的方法來。不然整個檔案就是乙個字串,這個問題是找到串S的全部不重複的子串吧…那麼應該首先生成串S的全部子串集合A,然後應用各位巨巨的做法吧。

10樓:captainwong

純粹的C語言太久沒用我都忘記了,我來提供乙個C++的版本:

#include

#include

#include

intmain

(int

argc

,char

**argv)}

std::

ofstream

out(

"C:/a.txt"

);for

(auto

line

:set

)out

.close

();}

呼,還真是麻煩。。。

11樓:

hash表,讀到新的hash值存新的字串,對應hash值就置1,檔案太大想辦法拆一下即可。

但是這樣字串的hash值可能會重複,這個時候可以給收集到的字串做個trie樹,重複字串通過trie樹驗證一下。

12樓:丁俊堯

純粹的C語言太久沒用我都忘記了,我來提供乙個半人工的版本,大家有空再翻譯成C語言好了:

1.用文字編輯器開啟該文件。

2.令i=1,j=0。

3.若第i個字串存在,進入下面的迴圈。

4.搜尋文件中第i個字串,令搜尋結果數為j。

6.i=i+1。(迴圈結束,返回第3步)

7.儲存檔案,退出文字編輯器。

13樓:Skiiii

純粹的C語言太久沒用,我其實還記得。

先用C語言實現乙個SHELL,要符合POSIX的那種然後 cat file.txt | sort | uniq即可。

14樓:在雲端

純粹的C語言太久沒用我都忘記了,我來提供乙個python的版本,大家有空再翻譯成C語言好了:

file

=open

("test"

)ans

=list

(set(re

.split(r

"[^\w]+"

,file

.read

())))(逃

C語言fread函式怎麼把檔案資訊讀入結構體變數中?

shzy 編譯器說燙啊,還不趕緊澆點水 滑稽 想法很好,但是字串處理很麻煩,txt檔案預設是ansi,在中文作業系統上也就是gb2312,也就是和utf 8一樣是相容ascii碼的,這還算比較好的。你想一次全部讀到結構體陣列中,可是檔案裡你看不見的符號有很多,tab,換行符 n,空格等等。得考慮很多...

為什麼C 標頭檔案喜歡把乙個型別通過typedef定義出無數個新名字,這有什麼意義嗎?

習慣和風格問題。比如,在同時引用多個第三方庫,當它的命名空間相似,函式名 引數列表完全相同時,你還可以通過自定義的型別名來感知這個介面是幹什麼的。 exiledkingcc 歷史遺留問題。比如一開始沒有uint8 t這樣的型別,就只能用typedef了。其它的情況也類似,需要由名字直接表達其意義,就...

C或者C 怎麼監控乙個,檔案改變了(比如txt)?

題主的問題 C或者C 怎麼監控乙個,檔案改變了 比如txt C或者C 怎麼監控乙個檔案改變了 比如txt 意思是 比如C語言執行到某一行,停止了,只有當txt檔案改變了 另外乙個程式向裡面新增了內容 它才讀取txt,然後執行下去。題外題 怎麼暫停程式,等待變化後,讀入資料呢?忘了說明了,Window...