線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1451
推到 Plurk!
推到 Facebook!

如何用c語言,作一段數字的相似度判斷

答題得分者是:twinstart
duncan0618
一般會員


發表:6
回覆:3
積分:1
註冊:2007-10-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-03 22:30:47 IP:122.124.xxx.xxx 訂閱
是一個c語言的作業問題...
請提供一個方法讓小弟可以解題...
問題是
判斷一串數字約10個,跟檔案裡的數字串比較相似度
檔案為 a.txt
1010101010
1101110111
1010001000
1111111111
跟數字串 如下比較相似度
1010110010

例如相似度為70% 顯示出來,也就是要有七個數字是對的
請問我可以用什麼方法呢

小弟的主表單menu已完成
剩配對程式了

[code cpp]
#include
//#include
#include

unsigned size=0;
//定義個別資料欄位類別
class EmpRec
{
char name[15];
char gender[10];
char habit[10];
public:
void get();
void print();

};
//定義資料庫類別
class Database
{
EmpRec emp_list[100];
public:
void insert();
void print();
void clear();
// void mate();
char do_menu();
};

//定義輸入資料函數
void Database::insert()
{
char rep;
do
{
emp_list[size].get();
size ;
cout<< "\n輸入下一筆資料(y/n)?";
cin>>rep;
cout< } while(rep =='y' || rep == 'Y');
cout<}
//定義輸出紀錄函數
void Database::print()
{
cout< < < for (unsigned i=0 ; i emp_list[i].print();
cout<}
//定義清除紀錄函數
void Database::clear()
{
size = 0;
}
//定義配對選擇函數

//定義選擇清單函數
char Database::do_menu()
{
char select;
cout<<"電腦擇友配對資料表單\n";
cout<<"興趣\n";
cout<<"1. 聽古典音樂 (是/否) 2. 喜歡聽流行音樂 (是/否)\n";
cout<<"3. 喜歡登山(是/否) 4. 喜歡看電影 (是/否)\n";
cout<<"5. 喜歡恐怖電影(是/否) 6. 喜歡喜劇片 (是/否)\n";
cout<<"7. 喜歡辛辣食物(是/否) 8. 喜歡清淡口味 (是/否)\n";
cout<<"9. 喜歡跳舞(是/否) 10. 喜歡上網 (是/否)\n\n";
cout<<"請選擇 I(輸入), P(輸出), C(清除), K(配對), Q(結束) :";
cin>>select;
return select;
}
//定義插入紀錄函數
void EmpRec::get()
{
cout<<"請輸入姓名:";
cin>>name;
cout<<"請輸入性別(M/F):";
cin>>gender;
cout<<"請輸入興趣:";
cin>>habit;
}
//定義輸出紀錄函數
void EmpRec::print()
{
cout< < <}
//主函式

Database base;
int main()
{
base.clear();
while(1)
{
switch (base.do_menu())
{
case 'i': case 'I':
base.insert();
break;
case 'p': case 'P':
base.print();
break;
case 'c': case 'C':
cout<<"已清除所以擇友資料\n\n";
base.clear();
break;
// case 'k' case'K':
// base.mate;
// break;
case 'q': case 'Q':
return 0;
break;
}
}
return 0;
}

[/code]
編輯記錄
duncan0618 重新編輯於 2008-01-04 00:50:07, 註解 無‧
twinstart
一般會員


發表:4
回覆:7
積分:17
註冊:2007-12-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-04 17:44:21 IP:60.250.xxx.xxx 訂閱
下面的作法請您參考參考:
利用XOR的特性比對,相同回傳0。

[code cpp]
int main(int argc, char* argv[])
{
char *str1 = "1010101010", *str2 = "1010110010";
int i,k=0;

for(i=0;i<10;i )
{
if((str1[i]^str2[i])==0) //XOR
k;
}
printf("Result= %d\n",k);

getchar();
return 0;
}

[/code]
duncan0618
一般會員


發表:6
回覆:3
積分:1
註冊:2007-10-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-05 03:09:22 IP:122.124.xxx.xxx 訂閱
謝謝你的方法有解決我的配對方法的問題
請問我這一段該怎麼寫(void Database::mate()),因為我要讀檔後,作配對
我要分別輸入 姓名 性別 興趣
性別不同的才做興趣配對相似70% 配對成功,並把配對資料印出。

data.dat
Tomm M 1010101010
Mary F 1000100011
ETFE M 1000111101
Bood F 1011101100
Vaid M 1001100100
Rood F 1111011101
NoNo M 0100101100
Coco F 1011100101
Vava M 0111011111
Hoho F 1001111110

先判斷性別,不同性別再進行興趣配對


[code cpp]
#include
#include
#include
#include
#include
unsigned size=0;
//定義個別資料欄位類別
class EmpRec
{
char name[15];
char gender[10];
char habit[10];
public:
void get();
void print();
};
//定義資料庫類別
class Database
{
EmpRec emp_list[100];
public:
void load(); //載入函數
void insert(); //新增函數
void print(); //輸出函數
void clear(); //清除函數
void mate(); //配對函數
char do_menu(); //menu
};
//定義載入資料函數
void Database::load()
{
ifstream inFile;
char Database;
inFile.open("data.dat", ios::in);
if(!inFile)
{
cerr << "開啟輸入檔錯誤\n\n" << endl;
exit(1);
}
while(inFile.get(Database))
{
cout< }
cout< inFile.close();
}
//定義輸入資料函數
void Database::insert()
{
char rep;
do
{
emp_list[size].get();
size ;
cout<< "\n輸入下一筆資料(y/n)?";
cin>>rep;
cout< } while(rep =='y' || rep == 'Y');
}
//定義輸出紀錄函數
void Database::print()
{
cout< < < for (unsigned i=0 ; i emp_list[i].print();
}
//定義清除紀錄函數
void Database::clear()
{
size = 0;
}
//定義配對選擇函數
void Database::mate()
{
char *habit, *habit2;
int i,k=0;
int sum=k;
char rep;
emp_list[size].get();
size ;
cout< for(i=0;i<10;i )
{

if((habit[i]^habit2[i])==0) //XOR
k ;
}
sum>6;
cout<<"配對成功"< cout< getchar();
}
//定義選擇清單函數
char Database::do_menu()
{
char select;
cout<<"電腦擇友配對資料表單\n";
cout<<"興趣\n";
cout<<"1. 聽古典音樂 (是/否) 2. 喜歡聽流行音樂 (是/否)\n";
cout<<"3. 喜歡登山(是/否) 4. 喜歡看電影 (是/否)\n";
cout<<"5. 喜歡恐怖電影(是/否) 6. 喜歡喜劇片 (是/否)\n";
cout<<"7. 喜歡辛辣食物(是/否) 8. 喜歡清淡口味 (是/否)\n";
cout<<"9. 喜歡跳舞(是/否) 10. 喜歡上網 (是/否)\n\n";
cout<<"請選擇 I(輸入), P(顯示), C(清除), K(配對), Q(結束) :";
cin>>select;
return select;
}
//定義插入紀錄函數
void EmpRec::get()
{
cout<<"請輸入姓名:";
cin>>name;
cout<<"請輸入性別(M/F):";
cin>>gender;
cout<<"請輸入興趣:";
cin>>habit;
}
//定義輸出紀錄函數
void EmpRec::print()
{
cout< < <}
//主函式
Database base;
int main()
{
base.clear();
while(1)
{
switch (base.do_menu())
{
case 'i': case 'I':
base.insert();
break;
case 'p': case 'P':
base.print();
base.load();
break;
case 'c': case 'C':
cout<<"已清除所以擇友資料\n\n";
base.clear();
break;
case 'k': case'K':
base.mate();
break;
case 'q': case 'Q':
return 0;
break;
}
}
return 0;
}

[/code]
編輯記錄
duncan0618 重新編輯於 2008-01-05 03:47:18, 註解 無‧
系統時間:2024-04-20 3:49:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!