Re: [問題] 簡單的字串搜尋程式

看板C_and_CPP (C/C++)作者 (Piggy)時間16年前 (2009/08/08 18:13), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串3/3 (看更多)
謝謝高人指點 真得很感謝 不過可能是我表達不清楚 在此先道歉 我的檔案大概長成這樣 Date 國泰 鴻海 聯發科 寶來 08/05 38.5 98.2 480.56 27.12 08/06 40.68 96.5 500 26.98 . . . . . . . . . . 依此類推 我想說由鍵盤輸入: 國泰 程式就能幫我抓出他是在矩陣的第一行 再由鍵盤輸入:寶來 程式就能幫我抓出寶來是在第四行 接下來我就開始針對國泰那一行的數值和寶來那一行的數值開始作計算 所以我想說把純數值資料丟給依個矩陣叫做data[nrow][ncol] 其他文字丟給一個文字矩陣叫做name[] 然後輸入的文字用do while迴圈跑 如果有match到name[j]的那一行 就把j記錄下來給y 然後之後就用data[i][y] 開始作分析 不知道還有沒有更好的作法 謝謝 ※ 引述《softwind (software everywhere)》之銘言: : ※ 引述《a5170040 (Piggy)》之銘言: : : 目的:讓使用者輸入ID : : 讀取進來資料的第一列為我們的ID,第二列開始才是data : : 藉由我們所輸入的ID讓程式能搜尋到這是在檔案的哪一行 : : (就是變數在第幾行的意思) : : 以利後續做資料分析 : : 我目前只能做到如果資料全部都是數值,我可以順利做資料分析 : ^^^^ : 架構出來 應該就是換 operation吧 : #include <cstdio> : #include <cstdlib> : #include <cstring> : using namespace std; : static FILE *l_file=0; : typedef struct{ : unsigned long ID; : char *pch_name; : }StudentInfo; : static StudentInfo l_IdName[100]={0}; //max has 100 students : // load data from file to mem. : void read_file(){ : int idxRow=0; : l_file = fopen("sample.txt","r"); : if( l_file == 0) return; : while( !feof(l_file) ){ : unsigned long ID=0; : char tmp_name[100]={0};//temp string to hold the student name : char *p_name = 0; : fscanf(l_file, "%d%*c%s", &ID, tmp_name); : l_IdName[idxRow].ID = ID; : // duplicate the name : p_name = (char*)malloc( strlen(tmp_name)+1 ); : strcpy( p_name, tmp_name ); : l_IdName[idxRow].pch_name = p_name; : //如果兩個都是 string的話 就用string的方式 : //把 ID的 assign動作代換掉 : idxRow++; : } : } : //search id:name data at mem. : const char* getName_byID(const unsigned long ID_){ : unsigned int idxRow=0; : for( idxRow=0;l_IdName[idxRow].pch_name!=0 ;idxRow++){//linear search. : if(ID_ == l_IdName[idxRow].ID) : return l_IdName[idxRow].pch_name; : //如果是string 把相等性判斷 換成 strcmp(X,Y) == 0 : } : return 0; : } : int main(){ : read_file(); : unsigned long ID1,ID2; : const char *p_name1,*p_name2; : printf("請選擇班對 :\n"); : printf("學號 1:\n"); : scanf("%d",&ID1); : printf("學號 2:\n"); : scanf("%d",&ID2); : p_name1 = getName_byID(ID1); : p_name2 = getName_byID(ID2); : printf("%s 和 %s 在一起! 在一起! 在一起!\n", p_name1,p_name2 ); : system("pause"); : return 0; : } : 資料檔案 "sample.txt" 範例如下 : ----------- file start -------------- : 1 nick : 2 jack : 3 jeff : 4 jackson : 5 smith : 6 smithson : 7 andy : 8 anderson : 9 bill : 10 Bob : 11 gate : 12 hero : 13 keoi : ----------- file end ----------------- -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.64.150.221

08/08 18:51, , 1F
囧mmmmmz 那你就用 Excel吧 大哥
08/08 18:51, 1F

08/08 19:01, , 2F
哈哈....謝謝你啦>///<
08/08 19:01, 2F

08/08 21:44, , 3F
我現在可以讀了字串了...但是當我輸入相同的字串
08/08 21:44, 3F

08/08 21:45, , 4F
輸入的字串和讀入檔案的字串陣列還是沒有辦法match
08/08 21:45, 4F

08/08 21:50, , 5F
中文佔2個char,資料建議用struct or class來建立
08/08 21:50, 5F

08/08 21:52, , 6F
我現在連英文也搞不定@@...謝謝樓上
08/08 21:52, 6F
文章代碼(AID): #1AVK_33a (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AVK_33a (C_and_CPP)