字符串string、字符char、数字int之间的转换

版权声明:本文为自学而写,如有错误还望指出,谢谢^-^ https://blog.csdn.net/weixin_43871369/article/details/89475419

1.字符串<=>字符

1.1 字符串到字符转换

直接像数组一样取值char ch=str[i],或者char ch=str.at(i)

string str="this is a test";
char ch;
for(int i=0;i<str.size();++i)
{
    ch=str.at(i);
    putc(ch);
}

1.2 字符到字符串转换

直接字符相加就可以实现

string str="";
char ch;
while((ch=cin.get())!='\n')
{
    str+=ch;
}

2.字符串<=>数字

2.1 字符串到数字

Solution 1 利用stringstream

    stringstream sstr(str);
    int x;
    sstr >> x;//(即从sstr中提取数据)

Solution 2 利用C中的sscanf函数

 char str[] = "15.455";
     int i;
     float fp;
     sscanf( str, "%d", &i ); // 将字符串转换成整数 i = 15
     sscanf( str, "%f", &fp ); // 将字符串转换成浮点数 fp = 15.455000
     //打印
     printf( "Integer: = %d ", i+1 );
     printf( "Real: = %f ", fp+1 );
     return 0;

Solution 3 利用 C标准库atoi, atof, atol, atoll(C++11标准) 函数将字符串转换成int,double, long, long long 型

C语言库函数名: atoi

  功 能: 把字符串转换成整型数

  函数说明: atoi()会扫描参数nptr字符串,检测到第一个数字或正负符号时开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整型数。

  原型: int atoi(const char *nptr);

  需要用到的头文件: #include <stdlib.h>

string str;
getline(cin,str,'\n');
int num=atoi(str.c_str());

Solution 4.如果对于"12 34 45#78?910"让提取数字,这时就用到了字符串剪切函数strtok ();

扫描二维码关注公众号,回复: 6070363 查看本文章
#include <iostream>
#include<cstring>
/*对于输入1,2,3,4,5,6...,输出1 2 3 4 5 6...*/
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int dp[1000],i=0;
    cin.tie(0);
    cout.tie(0);
    cout<<"One way:"<<endl;
    memset(dp,0,sizeof(dp));
    while(cin>>dp[i++]&&cin.get()!='\n');
    for(int j=0;j<i;j++)
    cout<<dp[j]<<" ";
    cout<<endl;
    cout<<"Another way:"<<endl;
    int pd[1000],t=0;
    char *str=new char[1000],*temp;
    cin.getline(str,1000);
    temp=strtok(str,",?#");
    while(temp)
    {
        sscanf(temp,"%d",&pd[t++]);
        temp=strtok(NULL,",?#");//注意此处需要将剪切的各片段分别取出
    }
    for(int j=0;j<t;j++)
    cout<<pd[j]<<" ";
    cout<<endl;
    cout<<"Judge a character in a string.\n";
    cout<<"c in abcdef "<<strchr("abcdef",'c')<<endl;
    return 0;
}

 2.2 数字到字符串

Solution 1 利用stringstream

    stringstream sstr;
    int x;
    sstr << x;
    string str = sstr.str();

缺点:处理大量数据转换速度较慢。stringstream不会主动释放内存,如果要在程序中用同一个流,需要适时地清除一下缓存(用stream.str("")和stream.clear()).

Solution 2 利用C中的sprintf函数 

int num;
cin>>num;
char ch[100];
sprintf(ch,"%d",num);

Solution 3 利用C中的 itoa函数

char *itoa(int value, char *string, int radix);

value: 待转化的整数。

radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。

* string: 保存转换后得到的字符串。

返回值:

char * : 指向生成的字符串, 同*string。

备注:该函数的头文件是"stdlib.h"

 Solution 4 直接利用to_string()函数

int num;
cin>>num;
string str="";
str+=to_string(num);

3.字符<=>数字

3.1 字符到数字的转化

最简单的方式就是直接转换

char ch;
cin.get(ch);
if(isdigit(ch))
{
   int num=ch-'0';
   cout<<num;
}

3.1 数字到字符的转化

int num;
cin>>num;
char ch=num+'0';//9->'9'

参考:https://www.cnblogs.com/happygirl-zjj/p/4633789.html

欢迎补充!!

猜你喜欢

转载自blog.csdn.net/weixin_43871369/article/details/89475419