zoukankan      html  css  js  c++  java
  • C++中字符串和intfloatchar*类型的相互转换

    C++中字符串和intfloatchar*类型的相互转换

    因为本人参加算法类比赛,会有题目有这方面的需求,虽然网上文章很多,但都不够综合,所以整理至此,方便自己也方便后人。

    至于longdouble等转成string类型,这里不再赘述

    一、string和char*的互转

    1. char*->string

    const char* nodename;
    string temp = nodename;
    string temp2(nodename);
    

     2. string->char*,当然也有些其他的做法,但是看到说可能不安全,而且有些转换后是const的,不方便。看来看去还是这个最舒服。

     

    string str="sdfgdsfgdf";
    	char s[100];
    	strcpy(s,str.c_str());
    

     

    二、string转int的方式(代码均已考虑到负号和前导0的情况。参考:https://www.cnblogs.com/A-Little-Nut/p/8056421.html)

      1. 按照十进制的特点进行算术运算得到int,简单的代码如下。

        int str2int(string a){
            int res=0;
            if(a[0]!='-'){
                res+=a[0]-'0';
            }
            _for(i,1,a.length()){
                res*=10;
                res+=a[i]-'0';
            }
            if(a[0]=='-'){
                res*=-1;
            }
            return res;
        }

         

      2. 采用标准库(#include<stdlib.h>)中atoi函数。

        string s = "12"; 
        int a = atoi(s.c_str()); 
        

        对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等。

      3. 采用sstream头文件中定义的字符串流对象来实现转换。(#include <sstream> )

        istringstream is("12"); 
        int i; 
        is >> i; 
        

         

    三、int转string的方式(若int有前导0,默认int为8进制)

    1. c++11标准增加了全局函数std::to_string:(不一定所有比赛都支持c++11)

      string to_string (int val);

      string to_string (long val);

      string to_string (long long val);

      string to_string (unsigned val);

      string to_string (unsigned long val);

      string to_string (unsigned long long val);

      string to_string (float val);

      string to_string (double val);

      string to_string (long double val);

    2. 自己实现,其中,max为n值的长度+1(参考:https://www.cnblogs.com/smile233/p/8379802.html)
      string to_String(int n,int max){
      	int m = n;
      	char s[max];
      	char ss[max];
      	int i=0,j=0;
      	if (n < 0){
      		m = 0 - m;
      		j = 1;
      		ss[0] = '-';
      	}    
      	while (m>0){
      		s[i++] = m % 10 + '0';
      		m /= 10;
      	}
      	s[i] = '';
      	i = i - 1;
          while (i >= 0){
      		ss[j++] = s[i--];
      	}    
      	ss[j] = '';    
      	return ss;
       }
      

       

    3. 借助字符串流。标准库定义了三种类型字符串流:istringstream,ostringstream,stringstream,看名字就知道这几种类型和iostream中的几个非常类似,分别可以读、写以及读和写string类型,它们也确实是从iostream类型派生而来的。要使用它们需要包含sstream头文件。

      除了从iostream继承来的操作

        1.sstream类型定义了一个有string形参的构造函数,即:  stringstream stream(s); 创建了存储s副本的stringstream对象,s为string类型对象

        2.定义了名为str的成员,用来读取或设置stringstream对象所操纵的string值:stream.str(); 返回stream中存储的string类型对象stream.str(s); 将string类型的s复制给stream,返回void

      int aa = 30;
      stringstream ss;
      ss<<aa; 
      string s1 = ss.str();
      cout<<s1<<endl;
      

       此处,用ostringstream也可以。

    4. (未完待续)

     

  • 相关阅读:
    1234D.Distinct Characters Queries(树状数组)
    1217C.The Number of Good Substrings(思维)
    1217B.Zmei Gorynich(思维)
    1213D2.Equalizing by Division(hard version)(图论)
    CentOS7.5搭建Hadoop2.7.6完全分布式集群
    CentOS7.5搭建spark2.3.1集群
    CentOS7.5搭建Hive2.3.3
    【Java入门】JDK安装和环境变量配置(Win7版)
    python第三方库大全
    Python常用模块大全
  • 原文地址:https://www.cnblogs.com/VsKendo/p/10502233.html
Copyright © 2011-2022 走看看