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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM