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

連續字串轉換成整數

答題得分者是:rick060
超級賽亞人3
一般會員


發表:38
回覆:53
積分:23
註冊:2007-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-02 01:41:33 IP:124.8.xxx.xxx 訂閱
練習開檔讀檔以及寫入,在字串轉換部分有點問題。
我個別用fscanf讀取是沒有問題的。

但是如果用fgets讀取時假設我的數字有三列如下
15 10 12 19 24
37 13 22 25 39
39 4 13 14 39

則我第一次讀15 10 12 19 24 , 我該如何把這個字串轉成五個整數並且存檔呢?
會用fgets是因為假設我並不知道txt檔裡有多少資料,所以用fscanf似乎會有問題。
因此讀到'\n'似乎會比較好,多加一個計數即可知道會有幾列。

下面是我練習的一個簡單例子,希望可以讀進來後變為整數,接下來才能進一步處理。
我知道
char *x;
int i;
*(x i);
可以個別讀出自串的每個位置,但讀出後要如何變成整數呢?


[code cpp]
#include
#include

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
FILE *ff1,*ff2;
char xx[80],yy[50],cc[10];
char *zz;
int a,b,i,j,y[3][5],x[50],ch,num,len;
ff1=fopen("c:\\AAA.txt","rt");
ff2=fopen("c:\\BBB.txt","wt");
if(ff1==NULL && ff2==NULL)
{
printf("Can't open file!");
exit(1);
}
i=j=0;
while( (fgets(xx,50,ff1)) != NULL)
{
printf("%s",xx);
fputs(xx,ff2);
}

fclose(ff1);
fclose(ff2);
system("pause");
return 0;
}
//---------------------------------------------------------------------------

[/code]


thanks.
附加檔案:4e8750cd6e616_AAA.txt
超級賽亞人3
一般會員


發表:38
回覆:53
積分:23
註冊:2007-06-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-10-02 11:05:32 IP:124.8.xxx.xxx 訂閱
我自己有修改過程式了,程式如下,仍有一些小錯誤

[code cpp]
#include
#include
#include

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
FILE *ff1,*ff2;
char xx[80];
int i,j,y[3][5],num,len1,len2,kk[10];
ff1=fopen("c:\\AAA.txt","rt");
ff2=fopen("c:\\BBB.txt","wt");
if(ff1==NULL && ff2==NULL)
{
printf("Can't open file!");
exit(1);
}
len2=0;//列
while( (fgets(xx,50,ff1)) != NULL)
{
len1=strlen(xx);
if(len1 == 1)
break;
i=j=0;
num=0;
for ( i=0; i < len1; i )
{
if( xx[i] == ' ' || xx[i] == '\n')
{
kk[j] = num;
num=0;
j ;
}
num*=10;
num =xx[i] % 0x30 ;
if( num == 32)
num=0;

if( ~(i<=len1) )
kk[j] = '\0';

}
len1=j; //

for(i=0;i {
printf("%d ",kk[i]);
y[len2][i]=kk[i];
fprintf(ff2, "%d ",y[len2][i]);

}
len2 ;
printf("\n");
fprintf(ff2,"\n");
}
fclose(ff1);
fclose(ff2);
system("pause");
return 0;
}
//---------------------------------------------------------------------------


[/code]

可是上列程式,數字若為32會被清掉,因為我32是用來判斷空白鍵
請問各位大哥,這部分有其他的解決方式嗎?

編輯記錄
超級賽亞人3 重新編輯於 2011-10-01 21:08:30, 註解 無‧
超級賽亞人3 重新編輯於 2011-10-01 21:09:19, 註解 無‧
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-10-03 08:32:40 IP:60.250.xxx.xxx 未訂閱
參考函式

strtok
atoi
超級賽亞人3
一般會員


發表:38
回覆:53
積分:23
註冊:2007-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-10-03 19:28:44 IP:124.8.xxx.xxx 訂閱
之前用atoi但是只能轉第一個數字
但是我試過用strtok後發現可以把連續字串轉成一個個數字


[code cpp]
#include
#include
#include

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
FILE *ff1,*ff2;
char xx[80];
int i,j,y[5][5],num,len1,len2,kk[10];
ff1=fopen("c:\\AAA.txt","rt");
ff2=fopen("c:\\BBB.txt","wt");
if(ff1==NULL && ff2==NULL)
{
printf("Can't open file!");
exit(1);
}
while( (fgets(xx,50,ff1)) != NULL)
{
char *test = strtok(xx, " ");

while (test != NULL)
{
printf("%s ", test);
fprintf(ff2, " %s",test);
test = strtok(NULL, " ");

}
}
fclose(ff1);
fclose(ff2);
system("pause");
return 0;
}
//---------------------------------------------------------------------------

[/code]

===================引 用 rick060 文 章===================
參考函式

strtok
atoi
系統時間:2017-12-15 2:47:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!