在写跨平台C/C++程序时,可能会用到数字int、字符串string、char*之间的转换,下面是一些方法的汇总:
- char * str转数字
int atoi (const char * str);//字符串转int
long int atol ( const char * str );//字符串转long
double atof (const char* str);//字符串转double
- 数字转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;
}
- 数字类型转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);
- 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()转换一下
- 常用的字符串操作函数:
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