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;
    }
    

  • 相关阅读:
    ecshop 商品分类下的销售排行
    ecshop批量清除商品的精品新品热销属性
    ECSHOP二次开发之给商品增加新字段
    ECSHOP首页调用文章内的缩略图
    ECSHOP给分类添加代表图
    ECSHOP首页促销商品下显示促销时间
    鼠标点击后更换背景
    ECSHOP如何修改商品评论或留言的日期
    ECSHOP设置指定IP才能登录后台
    ecshop远程图片本地化保存相册图片
  • 原文地址:https://www.cnblogs.com/G-H-Y/p/14742663.html
Copyright © 2011-2022 走看看