C++字符串转数字,数字转字符串

字符串转数字

如将“32”转为32,将“3.1415”转为3.1415,将“567283”转为567283。使用:

//Convert string to integer, more

int atoi ( const char * str );

//Convert string to double, more

double atof ( const char * str ); 

// Convert string to long integer

long int atol ( const char * str );  

//Read formatted data from string

int sscanf ( const char * str, const char * format, ...);

  

Example1:

/ atoi,atof,atol example /

#include <stdio.h>
#include <stdlib.h>
int main ()
{
  int a;float b;long c;
  a=atoi("32");
  b=atof("3.1415");
  c=atol("567283");
  printf ("%d,%f,%d",a,b,c); 
  return 0;
}

Output:

32,3.141500,567283

Example2:

/ sscanf example /

#include
int main ()
{
int a;float b;long c;
sscanf (“32,3.1415,567283”,”%d,%f,%d”,&a,&b,&c);
printf (“%d,%f,%d”,a,b,c);
return 0;
}

Output:

32,3.141500,567283

数字转字符串

如将32转为“32”,将3.1415转为“3.1415”,将567283转为“567283”。使用:

//Write formatted data to string

int sprintf ( char * str, const char * format, ... );//C++中为了安全性使用sprintf_s

//Convert integer to string (non-standard function)
//This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.
//A standard-compliant alternative for some cases may be sprintf.

char *  itoa ( int value, char * str, int base );

Example3:

/ sprintf example /

#include <stdio.h>
int main ()
{
  char a[10],b[10],c[10];
  sprintf(a, "%d", 32);
  sprintf(b, "%f", 3.1415);
  sprintf(c, "%d", 567283);
  printf("%s,%s,%s",a,b,c);
  return 0;
}

Output:

32,3.141500,567283

使用stringstream进行字符串与数字的转换

// using stringstream constructors.
#include <iostream>
#include <sstream>
using namespace std;
int main () 
{
  int a;float b;long c;
  char d[10],e[10],f[10];

  /* string to number */
  stringstream ss;
  ss << "32";
  ss >> a;
  ss.clear();

  ss << "3.1415";
  ss >> b;
  ss.clear();

  ss << "567283";
  ss >> c;
  ss.clear();

  cout<<a<<","<<b<<","<<c<<endl;

  /* number to string */
  ss << a;
  ss >> d;
  ss.clear();

  ss << b;
  ss >> e;
  ss.clear();

  ss << c;
  ss >> f;
  ss.clear();

  cout<<d<<","<<e<<","<<f<<endl;

  return 0;
}

Output:

32,3.141500,567283  
32,3.141500,567283  

一个笔试题,输入一个数n,把1到n按字符顺序排序

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<sstream>
using namespace std;
int main()
{
    int n;
    string j;
    cin >> n;
    char a[100];
    vector<string>d;
    for (int i = 0; i < n; i++){


        //stringstream ss;
        //ss << i;
        //string   s = ss.str();
        //d.push_back(s);

        sprintf_s(a, "%d", i);    
        d.push_back(a);


    }
    sort(d.begin(), d.end());
    for (int i = 0; i < n; i++){
        cout << d[i]<<" " ;
    }
    return 0;

}

 输入12,输出,0 1 10 11 2 3 4 5 6 7 8 9
 
小结:C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性,可以使用这些库来实现安全和自动的类型转换。言下之意就是,使用stringstream进行字符串与数字的转换是更好的选择。