1. 程式人生 > 其它 >C++中atoi與itoa的相關用法

C++中atoi與itoa的相關用法

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)

參考資料:https://blog.csdn.net/candadition/article/details/7342092?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164544267116780269834486%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164544267116780269834486&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-3-7342092.pc_search_result_positive&utm_term=C%2B%2Bint%E8%BD%ACstring&spm=1018.2226.3001.4187

https://blog.csdn.net/weixin_30902675/article/details/99828349?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2