C++/C---字符串

其他类型转字符串

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溢出

%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
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 classstringstream 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);
}
原文地址:https://www.cnblogs.com/kimsimple/p/6804896.html