設想這樣乙個場景,有一天你黑進去乙個server,獲取的是普通使用者許可權,但是你在普通使用者根目錄下發現乙個readme檔案,上面寫著要獲取server的管理員口令,在當前使用者的根檔案目錄下有個檔案,獲取檔案每一行第乙個未重複的字元,一共有20行,最後這20個字元組成的就是這個系統的根口令。這裡需要注意的是,口令中不能含有控制符號與空格符號,所以需要對檔案進行過濾。
分析這個問題後,我們需要進行兩步,一步是過濾,一步是統計每行字元出現的頻數,並且把第乙個為1的字元列印出來。
空格以及控制字元占用了ascii表前32個,所以我們需要過濾掉這前32個。
所以有下面**,處理完每一行將結果存入tmp陣列中:
void inputcheck(char str,char tmp)
i++;
}}
然後需要對處理過的每行字串進行統計,演算法的思路很簡單,口令裡面使用到的字元從ascii的33開始到127結束,總共有96個字元,所以我們建立乙個大小為96的頻數陣列儲存每個字元出現的頻數,然後從字串的順序開始尋找頻數陣列裡面為一的第乙個字元,所以有下面的**:
void find(char str)
; int index=0;
while(str[i]!='\0')
i=0;
while(str[i]!='\0')
i++;
}}
開啟檔案的時候,有個小問題忘記掉了,fopen的時候,w+與w雖然都是以可寫的形式開啟檔案,但是開啟後會將檔案清空為0。
為了模擬各種檔案,我們需要手動輸入內容到檔案,然後再讀入在進行處理。
int main()
,str[2048]=,processor[2048]=;
printf("please input the data of lines,t<=20:\n");
scanf("%d",&t);
if(t>20)
else
{ /*清空檔案*/
fpw=fopen("./str.txt","w+");
fclose(fpw);
/*追加方式開啟檔案*/
fpw=fopen("./str.txt","a");
if(fpw==null)
printf("no file\n");
fflush(stdin);
while(n
字串 第乙個不重複的字元
有關這個題目可以有很多的考察方式,但是本質的乙個方法就是利用hash表,來降低時間複雜度。先看第乙個題目,給定乙個字串,找到這個字串的第乙個不重複的字元 在乙個字串 1 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元的位置。若為空串,返回 1。位置索引從0開始。所以 實現 int...
找字串中第乙個只出現一次的字元。
方法一 不要求時間複雜度,只要求做出來 兩次迴圈巢狀,遍歷字串。int find one char str,int len if count 2 if count 1 j len return 1 intmain 輸出結果 方法二 要求時間複雜度為o n 根據字元ascii 字元特性,先統計每個字元...
找出字串中第乙個不重複的字元
leetcode原題位址 將字串轉換成字元陣列 使用兩層迴圈遍歷,最終根據第二層迴圈退出時的下標值來判斷是否是不重複的字元 我的 public intfirstuniqchar string s if temp i temp j if j length if i length return resu...