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

如和判別個別數字出現的次數?

答題得分者是:christie
supergba2002
一般會員


發表:2
回覆:2
積分:0
註冊:2008-09-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-28 20:20:40 IP:218.170.xxx.xxx 訂閱
我有一份txt檔,我想讀入第一行的數值
1 6 3.00 90000.00
1 7 3.00 90000.00
2 8 1.80 90000.00
2 9 1.80 90000.00
3 10 2.00 90000.00
3 11 2.00 90000.00
4 12 1.20 90000.00
4 13 1.20 90000.00
5 41 2.00 90000.00
.
.
.

並判斷個數字出現的次數,輸出的結果如下:

A[1]=2
A[2]=2
A[3]=2
A[4]=2
A[5]=1
.
.
.

如何寫最簡單呢? 有請指點!

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-30 02:51:27 IP:59.115.xxx.xxx 訂閱
你PO了第二次了,這次我終於有些了解你在問什麼。

你的問題可大可小,我先把問題縮到最簡版,即假設
第一: 1,2,3,4… 每個數值都一定會循序出現,且不會跳號(比如1、2、3、9 從3就跳到9)。
第二: 你已經先初始化一個固定大小的一維陣列。比如說文字檔共9列,那就宣告 int A[10] = {0}; //其中A[0]不會用到,思考一下
第三: 你會自己用迴圈一列一列的把第一行的字串s讀出。

三個條件成立後就開始如下計算:


[code cpp]
int i; //暫存用的數值
//開始迴圈裡
//一些取讀檔取第一行s的程式
i = StrToInt(s); //假設s是取出來的字串
A[i]=A[i] 1;
//......你的一些程式碼
//結束迴圈

[/code]

假如說,你原來的條件不合我三個假設,那你就要改程式。那就變得更復雜!
有必要的時候再請把條件講更清楚以方便前輩幫你。

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2008-09-30 02:52:41, 註解 無‧
supergba2002
一般會員


發表:2
回覆:2
積分:0
註冊:2008-09-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-30 10:52:15 IP:140.115.xxx.xxx 訂閱

[code cpp]
#include
#include
#include
#include
using namespace std;


void main()
{

int i=1,j=1,k,h=1;
double link[457][4]={0}; //
int a[457][2]={0}; //


ifstream file("big-link.txt",ios::in);

if(!file)
{
cout << "檔案無法開啟"<
}

for (i=1;i<=457;i ) //
{
for (j=1;j<=4;j )
{
file >> link[i][j] ;

}

}
file.close();


a[h][1]=link[1][1];
a[h][2] ;
for(k=2;k<=457;k ) //
{
if(link[k][1]==a[h][1])
{
a[h][2] ;
a[h][1]=link[k][1];

}
else
{

cout << "A[" << a[h][1] << "] = " << a[h][2] << endl;
h ;
a[h][1] = link[k][1];
a[h][2] ;


}

}

我用visual c 寫的,目前還是有點問題...

1.txt檔的資料筆數不一定,有可能100筆...500筆...1000筆,都要能讀進去運算出A[i]
2.txt檔的2.3.4行雖然這次的程式不需要用到,但往後的程式延伸會用到
3.實際txt檔中會有跳號的現象,好比2出現0次

[/code]
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-13 14:40:01 IP:59.124.xxx.xxx 訂閱
如果你的資料格式是固定的有以下這樣的方式
1.先fgets()讀出整行.
2.a 接著使用sscanf()以固定格式的方式讀取.
2.b 如果你每行的資料不固定,但是你都只要先讀取第一個欄位值的話,
也可考慮strtok().

如果你資料格式是free style我也不知道該怎麼解也許在你寫檔的時候加個標籤

如果這些資料是你自己的程式產出的,你怎麼用fwrite()寫到檔案就怎樣用
fread()讀出來,直接塞回structure. 接著應該就知道該怎樣計算了

希望你能找到適合你的方式
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-14 09:02:07 IP:122.117.xxx.xxx 未訂閱
#include <stdio.h>
#include <math.h><br />int main(void)
{
FILE *in;

char buffer[80];
int x;
int a[8000];

for(x=0; x<8000;x )
a[x]=0;
if ((in = fopen("smallink.txt", "rt"))
== NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return 1;
}
memset(buffer,'\0',80);
while(fgets(buffer, 80, in) != 0)
{
printf("%d ",atoi(buffer));
x=atoi(buffer);
a[x] ;
memset(buffer,'\0',80);
}
fclose(in);
return 0;
}
===================引 用 supergba2002 文 章===================
我有一份txt檔,我想讀入第一行的數值
1 6 3.00 90000.00
1 7 3.00 90000.00
2 8 1.80 90000.00
2 9 1.80 90000.00
3 10 2.00 90000.00
3 11 2.00 90000.00
4 12 1.20 90000.00
4 13 1.20 90000.00
5 41 2.00 90000.00
.
.

並判斷個數字出現的次數,輸出的結果如下:

A[1]=2
A[2]=2
A[3]=2
A[4]=2
A[5]=1
.
.

如何寫最簡單呢? 有請指點!
------
What do we live for if not to make life less difficult for each other?
系統時間:2024-05-04 19:30:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!