zoukankan      html  css  js  c++  java
  • 字符串和数字的相互转换

    注:

    1. 为了叙述的方便,以下数字均指整形,其它类型同样具有对应函数
    2. C语言的字符串是指字符数组,C++的字符串是指string,两者并不相同

    C语言

    字符串->数字

    • atoi(): 将字符串转换为整型值

    int atoi(const char *nptr);

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char str[10];
        scanf("%s", str);
    
        int n;
        n = atoi(str);
    
        printf("%d
    ", n);
    
        return 0;
    }
    
    • sscanf(): 从字符串中读取
      该函数的作用类似正则表达式,可以格式化字符串
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char str[10];
        scanf("%s", str);
    
        int n;
        sscanf(str, "%d", &n);
    
        printf("%d", n);
    
        return 0;
    }
    

    数字->字符串

    • itoa():将整型值转换为字符串

    char *itoa (int value, char *str, int base );
    int value: 被转换的整数
    char *string: 转换后储存的字符数组
    int base: 转换进制数,如2,8,10,16 进制等,大小在2-36之间

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int n;
        scanf("%d", &n);
    
        char str[10];
        itoa(n, str, 10);
    
        printf("%s
    ", str);
    
        return 0;
    }
    
    • sprintf():将数字写入字符串中
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int n;
        scanf("%d", &n);
    
        char str[10];
        sprintf(str, "%d", n);
    
        printf("%s", str);
        return 0;
    }
    

    C++

    getline(): Get line from stream into string(读入一行字符串(保留空格))

    istream& getline (istream&  is, string& str, char delim);
    遇到字符delim读入停止
    
    istream& getline (istream&  is, string& str);
    

    字符串->数字

    istringstream

    istringstream: 从string读取数据
    使用标准的输出运算符(>>)从istringstream对象中以流的形式读取数据并存放入其它变量,读取操作实际转化为string的操作,所以这就是所谓的从string读取数据
    此时并不需要考虑变量的类型,即>>右侧的变量可以为int类型,从而实现stringint的类型转换

    #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {
        string str;
        getline(cin, str);
    
        istringstream is(str);
    
        int p;
        while (is >> p) cout << p << ' ';
    
        return 0;
    }
    

    stringstream

    stringstream:既可从string读数据,也可向string写数据
    此时的‘读’与‘写’的概念与istringstreamostringstream完全相同,因此不再赘述

    #include <iostream>
    #include <sstream>
    
    using std::cin;
    using std::cout;
    using std::endl;
    using std::string;
    using std::stringstream;
    
    int main()
    {
        int p;
        string str;
        stringstream s;
    
        getline(cin, str);
        
        // 向string写入数据(由其它变量向stringstream写入数据)
        s << str;
        
        // 从string读取数据(从stringstream读取数据存入其它变量)
        while (s >> p) cout << p << ' ';
    
        return 0;
    }
    

    stox()

    function instruction
    stoi Convert string to integer
    stol Convert string to long int
    stoul Convert string to unsigned integer
    stoll Convert string to long long
    stoull Convert string to unsigned long long
    stof Convert string to float
    stod Convert string to double
    stold Convert string to long double
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
      string n;
      cin >> n;
      cout << stoi(n) << endl;
    
      return 0;
    }
    

    数字->字符串

    ostringstream

    ostringstream: 向string写入数据
    使用标准的输出运算符(<<)向ostringstream对象以流的形式写入数据,写入操作实际转化为string的操作,所以这就是所谓的向string写入数据
    此时并不需要考虑写入string的数据是什么类型,即<<右侧的变量可以是int类型,从而实现intstring的类型转换

    #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {
        int p;
        ostringstream os;
    
        cin >> p;
        os << p;
    
        cout << os.str() << endl;
    
        return 0;
    }
    

    stringstream

    #include <iostream>
    #include <sstream>
    
    using std::cin;
    using std::cout;
    using std::endl;
    using std::string;
    using std::stringstream;
    
    int main()
    {
        int p;
        string str;
        stringstream s;
    
        cin >> p;
        
        // 向string写入数据(由其它变量向stringstream写入数据)
        s << p;
        
        // 从string读取数据(从stringstream读取数据存入其它变量)
        s >> str;
    
        cout << str << endl;
    
        return 0;
    }
    

    注: stringstream的复用问题

    这个问题涉及到两个函数std::stringstream::str()std::ios::clear()


    目前查询到的说法不一,暂不确定两个函数是否都需要使用,但测试结果是仅需要使用clear()即可达到复用的目的,但是是否会有其它问题还暂时没有验证

    stringstream ss;
    ss.str("");
    ss.clear();
    

    to_string()

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
      int n;
      cin >> n;
      cout << to_string(n) << endl;
    
      return 0;
    }
    

  • 相关阅读:
    后端程序员之路 28、一个轻量级HTTP Server的实现
    后端程序员之路 27、LogStash
    后端程序员之路 26、CAP理论
    后端程序员之路 25、Redis Cluster
    后端程序员之路 24、Redis hiredis
    后端程序员之路 23、一个c++的api framework
    后端程序员之路 22、RESTful API
    后端程序员之路 21、一个cgi的c++封装
    后端程序员之路 20、python复习
    flask框架的学习
  • 原文地址:https://www.cnblogs.com/G-H-Y/p/14742663.html
Copyright © 2011-2022 走看看