其他类型转字符串
itoa
功 能:把一整数转换为字符串
用 法:char *itoa(int value, char *string, int radix);
详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.其中value为要转化的整数, radix是基数的意思,即先将value转化为radix进制的数,之后在保存在string中.
备注:该函数的头文件是"stdlib.h"
#include <stdlib.h> #include <stdio.h> int main(){ int number = 123456; char string[25]; itoa(number, string, 10); printf("integer = %d string = %s ", number, string); return 0; }
可是他不是c的标准库函数,不同编译器可能报错,尽量避免使用
int sprintf( char *buffer, const char *format, [ argument] … );
字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。
printf是将一个格式化的字符串输出到屏幕。
sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭...."的提示。
sprintf()会根据参数format 字符串来转换并格式化数据,然后将结果复制到参数str 所指的字符串数组,直到出现字符串结束(' ')为止。关于参数format 字符串的格式请参考printf()。
【返回值】成功则返回参数str 字符串长度,失败则返回-1,错误原因存于errno 中。
:C语言对数组进行操作时并不检测数组的长度,如果str的长度不够,sprintf()很容易造成缓冲区溢出,带来意想不到的后果,黑客经常利用这个弱点攻击看上去安全的系统。
写入buffer的字符数是没有限制的,这就存在了可能buffer溢出。
int i=123456; char buffer [33]; snprintf(buffer, sizeof(buffer), "%d", i); printf ("buffer: %s ",buffer);
double i=123456.6526532; char buffer [33]; snprintf(buffer, sizeof(buffer), "%020.9f", i);///默认6位 右对齐左补0;无lf之说 printf ("buffer: %s ",buffer);
#方法三:使用stringstream
Input/output string stream class: stringstream provides an interface to manipulate strings as if they were input/output streams.
int a=123; double f=123.654; stringstream strStream; strStream<<a<<"---"<<f<<endl; cout<<strStream.str()<<endl;
字符串转其他类型
string类型转换为int, float, double类型
# 方法一: 使用stringstream
///模板函数:将string类型变量转换为常用的数值类型(此方法具有普遍适用性) template <class Type> Type stringToNum(const string& str) { istringstream iss(str); Type num; iss >> num; return num; } int main(int argc, char* argv[]) { string str("00801.36522655"); cout << stringToNum<double>(str) << endl; system("pause"); return 0; }
#方法二:使用atoi()、 atil() 、atof()函数 -----------------实际上是char类型向数值类型的转换
string a="123.32565"; cout<<atof(a.c_str())<<endl;///默认三位
string a="1234567891002565687"; cout<<atoll(a.c_str())<<endl;///默认三位
温馨提示:ANSI C 规范定义了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6个可以将字符串转换为数字的函数,大家可以对比学习。另外在 C99 / C++11 规范中又新增了5个函数,分别是 atoll()、strtof()、strtold()、strtoll()、strtoull(),在此不做介绍,请大家自行学习。
C/C++ string转大/小写
#include "cstdio" #include "cstring" #include <iostream> #include <sstream> #include "cctype" #include "string" #include "algorithm" using namespace std; int main() { string s="123asdASD"; transform(s.begin(), s.end(), s.begin(), ::toupper); cout<<s<<endl; transform(s.begin(),s.end(),s.begin(),::tolower); cout<<endl; char cs[]="asa221DDS"; int i=-1; while(cs[i++]) { cs[i]=toupper(cs[i]); } puts(cs); }