C/C++教程

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

 

这篇关于C++中atoi与itoa的相关用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!