Re: [問題] 如何把一個char陣列轉成int陣列

看板C_and_CPP作者 (純淨心靈永恆陽光)時間10年前 (2013/08/27 23:11), 編輯推噓4(406)
留言10則, 7人參與, 最新討論串2/2 (看更多)
最近版上戰得正兇, 所以可能沒人在意這個問題, 就讓小弟獻個醜。 ※ 引述《freexq (快樂蕃茄)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Dev-C++ 4.9.9.2 : 問題(Question): : 我有一個char陣列,char a[10]="123456789" : 我想把它轉成一個int陣列,int b[10]={1,2,3,4,5,6,7,8,9} : 錯誤結果(Wrong Output): : 編譯出現錯誤訊息 : invalid conversion from `char' to `const char*' : initializing argument 1 of `int atoi(const char*)' 錯誤訊息已經告訴你很清楚了。 你送進去 atoi() 的每個 a[i] 是 char 並不是 const char* 而atoi 接受的型別是 const char* compiler 沒辦法也不應該幫你做轉型, 所以編譯發生錯誤。 : 看不懂XD : 程式碼(Code):(請善用置底文網頁, 記得排版) : #include <iostream> : #include <cstring> : #include <cstdlib> //for system() : using namespace std; : int main( ) : { : char a[10]="123456789"; : int b[10]={0}; : int num=strlen(a); : for(int i=0;i<num;i++) : { : b[i]=atoi(a[i]); //error!!這裡出現錯誤 : cout<<b[i]<<endl; : } : system("pause"); : return 0; : } : 補充說明(Supplement): : 請各位先進教教小弟錯誤訊息是什麼意思 : 以及幫我修改程式碼來達到上述要求。 : 感恩!! 更改的方式很簡單, 就想辦法讓你送進去atoi的參數型別是 const char * 就好了 所以程式碼會長得像以下這樣 int main( ) { // 宣告成 const char* array const char *a[10]= {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}; int b[10]={0}; for(int i=0;i<10;i++) { b[i]=atoi(a[i]); cout<<b[i]<<endl; } system("pause"); return 0; } 以上,大功告成!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.199.221

08/28 01:56, , 1F
我怎麼覺得改成這樣有種硬是要用atoi而多此一舉的感覺
08/28 01:56, 1F

08/28 10:28, , 2F
多此一舉就對
08/28 10:28, 2F

08/28 11:52, , 3F
這個問題當然還有很多"奇淫技巧"可以解決,只是初學者我
08/28 11:52, 3F

08/28 11:53, , 4F
覺得先能夠理解這篇的觀念就可以了,太早學一些技巧我覺
08/28 11:53, 4F

08/28 11:53, , 5F
得容易走偏。
08/28 11:53, 5F

08/28 23:27, , 6F
b[i] = a[i] - '0' , 我實在不覺得是什麼奇淫怪技...
08/28 23:27, 6F

08/28 23:47, , 7F
其實C並未規定字元編碼是ASCII,所以使用atoi比較好
08/28 23:47, 7F

08/29 01:09, , 8F
-'0' 不同編碼下也適用, '1' 必定比 '0' 多 1
08/29 01:09, 8F

08/29 01:10, , 9F
'2' 必定比 '1' 多 1, 依此類推
08/29 01:10, 9F

09/01 12:22, , 10F
推版主
09/01 12:22, 10F
文章代碼(AID): #1I7C65S7 (C_and_CPP)
文章代碼(AID): #1I7C65S7 (C_and_CPP)