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

  • 相关阅读:
    WPF 自定义CheckBox样式
    WPF中的动画——(二)From/To/By 动画
    C# 异步编程
    C# 二维码生成 ( QRCoder )
    ASP.NET Core中的依赖注入(2):依赖注入(DI)
    从零搭建分布式文件系统MinIO比FastDFS要更合适
    WPF : ControlTemplate和DataTemplate的区别
    wpf 中 theme 的使用 和 listview 模板的使用.
    wpf 中的DataTemplate 绑定控件
    HTTP状态码含义
  • 原文地址:https://www.cnblogs.com/G-H-Y/p/14742663.html
Copyright © 2011-2022 走看看