C++中atoi與itoa的相關用法
阿新 • • 發佈:2022-02-22
C++中int整型轉換為字元型陣列
第一種方式:itoa(由於安全機制,C++中使用是_itoa_s)
通過itoa函式可以實現由整型到字元型陣列的轉換(_itoa_s)
_itoa_s ( int value, char *buffer, size_t sizeInCharacters, //存放結果的字元陣列長度,這裡值得注意的是,這個長度的大小往往與緩衝區的大小一致 int radix //進位制 );
注意:由於_itoa_s的任務是將整型轉換成字元型陣列(字串)因此在定義字串陣列的緩衝區時要額外多加一個位置,這個原理和字串(字元型陣列)的賦值與複製原理一樣
//將一個八位數的int整型轉換為字元型陣列 int main() { int a = 12345678; char number[9];//要多申請一個位置的空間,用來存放字元型陣列的字串結束符 _itoa_s(a,number,9,10); cout << number << endl;//輸出12345678 cout << strlen(number);//輸出8 return 0; }
注意:對於strlen函式而言,該函式的引數是字元型陣列(const),返回的是字元的有效個數(不包括字元型陣列的字串結束符‘/n’)
這裡貼上藍橋杯迴文題目,使用itoa的情況如下:
#include<iostream> using namespace std; bool Judgement1(int sub_date) { char* date = new char[9]; _itoa_s(sub_date, date, 9, 10); if (date[0] == date[2] && date[2] == date[5]&& date[5] == date[7] && date[1] == date[3] && date[3] == date[4] && date[4] == date[6]) { return true; } else { false; } delete[]date; } bool Judgement2(int sub_date) { char* date = new char[9]; _itoa_s(sub_date, date, 9, 10); if (date[0] == date[7] && date[1] == date[6] && date[2] == date[5] && date[3] == date[4]) { return true; } else { false; } delete[]date; } //最新的itoa是_itoa_s()該函式的引數有三個,第一個是傳入的int型數,第二個是字元型陣列的緩衝區,第三個是轉換的int數的長度,第四個是轉換的進位制 int main() { int date; cin >> date; date++; while (!Judgement2(date)) { date ++; } cout << date << endl; while (!Judgement1(date)) { date++; } cout << date; return 0; }
第二種方式:使用sprintf函式進行型別轉換 int sprintf ( char * str, const char * format, ... );
由於C++對C有著很好的繼承,因此我們可以使用C中springf進行整型到字元陣列的型別轉換,C 庫函式int sprintf(char *str, const char *format, ...)傳送格式化輸出到str所指向的字串。
int mian() { char* date = new char[9]; int sub = 100; sprintf_s(date, 9, "%d", sub);//sprintf的安全版本,在控制符與目標字元型陣列之間增加了字元型陣列緩衝區的大小 cout << date;//100; }
C++中字元型陣列轉換為int整型
int main() { //將字串陣列轉換為int整型atoi char a[] = "12345";//或者char a[6]="12345"給字串陣列(字串)留下一個結束符的位置 int sub; sub = atoi(a); cout << sub;//12345 cout << endl; //將字串轉換為int整型atoi string b = "123456"; char* sub_b = new char[strlen(b.c_str()) + 1]; strcpy_s(sub_b, strlen(b.c_str()) + 1, b.c_str()); cout << sub_b; delete[]sub_b; return 0; }
值得注意的是:在字串到整型的轉換過程中,需要先將字串轉換為字元型陣列(利用字串類中自定義的c_str函式),再通過複製函式進行對字元型陣列的複製(切記定義陣列時陣列長度+1)