C/C++程序中数字int、字符串string、char*之间的转换方法汇总

在写跨平台C/C++程序时,可能会用到数字int、字符串string、char*之间的转换,下面是一些方法的汇总:

  1. char * str转数字
int atoi (const char * str);//字符串转int

long int atol ( const char * str );//字符串转long

double atof (const char* str);//字符串转double
  1. 数字转char *
char *itoa(int value, char *string, int radix);//整数转字符串,radix是进制数

int sprintf( char *buffer, const char *format, [ argument] … );//可将整数转为字符串,如:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = 1234;
char res[20];
sprintf(res, "%d", num);
printf("%s\n", res); //10进制字符串输出:1234

sprintf(res, "%0o", num);
printf("%s\n", res); //8进制字符串输出:2322 

sprintf(res, "%0x", num);
printf("%s\n", res); //16进制字符串输出:4d2
return 0;
}
  1. 数字类型转std::string
    std::string to_string (int val);
    std::string to_string (long val);
    std::string to_string (long long val);
    std::string to_string (unsigned val);
    std::string to_string (unsigned long val);
    std::string to_string (unsigned long long val);
    std::string to_string (float val);
    std::string to_string (double val);
    std::string to_string (long double val);
  1. std::string 与 char* 的转换:

string 转 char*

//方法1
std::string str = "hello world";
const char *p = str.data();

//方法2
std::string str = "hello world";
const char *p = str.c_str();

//方法3
std::string str = "hello world";
char p[40];
str.copy(p, 5, 0);//这里5,代表复制几个字符,0代表复制的位置 
*(p + 5) = '\0';//要手动加上结束符

char*转换为string:

const char* p = "Hello world"; 
std::string str = p; // 可以对str直接赋值 
cout << str; 
printf_s("%s", str.c_str());//printf_s直接打印会乱码,需要str.c_str()转换一下
  1. 常用的字符串操作函数:
      memset(res, '\0', sizeof(res));//清空字符数组(按字节对内存块进行初始化)    
      char *strcpy(char* dest, const char *src);//拷贝字符串  
      char *strcat(char *dest, const char *src);//连接两个字符串
 截取字符串:
      假设:string s = "0123456789";
string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"

访问string字符串中元素:

string s="12345";
cout<<s.at(1);//输出2
cout<<s[1];//输出2

字符串比较函数:
strcmp():strcmp(s1,s2); 比較两个字符串。
strncmp():strncmp(s1,s2); 比較两个字符串前n位
erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
erase(position);删除position处的一个字符(position是个string类型的迭代器)
erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
比较规则:从左到右逐个字符进行比较(ASCII值),直到出现不同的字符或遇到’\0’为止。 假设所有的字符同样,则两字符串相等,返回值为0。
更多string的函数参考 https://blog.csdn.net/qq_37941471/article/details/82107077
假设出现不同的字符,则对第一次出现不同的字符进行比较。比较方法是以s1的第一个不同的字符减去s2的第一个不同的字符。以所得差值作为返回值(大于0。则返回1,小于0则返回-1)。
参考文章:
https://blog.csdn.net/u014801811/article/details/80113382
https://www.cnblogs.com/xudong-bupt/p/3479350.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值