連續字串轉換成整數 |
答題得分者是:rick060
|
超級賽亞人3
一般會員 發表:38 回覆:53 積分:23 註冊:2007-06-05 發送簡訊給我 |
練習開檔讀檔以及寫入,在字串轉換部分有點問題。
我個別用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. |
超級賽亞人3
一般會員 發表:38 回覆:53 積分:23 註冊:2007-06-05 發送簡訊給我 |
我自己有修改過程式了,程式如下,仍有一些小錯誤
[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是用來判斷空白鍵 請問各位大哥,這部分有其他的解決方式嗎? |
rick060
高階會員 發表:2 回覆:112 積分:217 註冊:2009-11-17 發送簡訊給我 |
|
超級賽亞人3
一般會員 發表:38 回覆:53 積分:23 註冊:2007-06-05 發送簡訊給我 |
之前用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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |