C++知识碎片整理(4)——string转int
2016/8/16
string和int类型数据的互转是经常使用到的功能,自然有很多的方法。 今天只记录我相对喜欢的一个string转int方法

示例程序

#include <iostream>
#include <sstream>

using namespace std;

int string2int(string s){
    int num;
    stringstream stream;
    stream << s;
    stream>>num;
    return num;
};


int main(){
    string a = "100";
    string b = "200";
    int num1 = string2int(a);
    int num2 = string2int(b);
    cout << num1 << "\t"<<num2<<endl;
    getchar();
    return 0;
}

说明

核心是stringstream的使用,stringstream是在库中定义的一种类,因此要首先引用这个库。库还定义了其他两个istringstream,ostringstream,顾名思义就是分别进行输入流,输出流和输入输出流操作的类。简单起见,直接使用stringstream(至于其他两类的存在意义,可以以后深究)。
<<和>>是stringstream输入输出的操作符,需要注意输入和赋值是不同的。因此如果你要重复使用stringstream,你要在每一次重用前clear()一下。以下例来说明这个问题

#include <iostream>
#include <sstream>

using namespace std;

int main(){
    string a = "100";
    string b = "200";
    cout << "a" << a << endl;
    cout << "b" << b << endl;
    stringstream ss;
    int num1, num2;
    ss << a;
    ss >> num1;
    cout << num1 << endl;
    ss.clear();
    ss << b;
    ss >> num2;
    cout << num2 << endl;
    getchar();
    return 0;
}

通过上例,使用stringstream进行两次string到int的转换,因为中间使用了clear()方法,程序正确执行,但如果把clear()注释掉,在输出第二个数时就会发现出现了错误,这是因为ss里的数据没有清空就继续输入了字符串“b”的数据,出现错误,由此可见<<操作和赋值的不同。
因此,在我实际使用过程中,我习惯于像最上方示例代码中将string2int写成一个函数,甚至专门设计自己熟悉的数据类型转化方法类库,这样可以方便自己的学习和开发,提高效率和程序正确率。

2016/9/18更新

同理:int转string示例:

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

 string s2;
 ss>>s2;
 cout<<s2<<endl; // 30

形成函数

string—->int

int string2int(string s){
    int num;
    stringstream stream;
    stream << s;
    stream >> num;
    return num;
}

int—–>string

string int2string(int n){
    stringstream ss;
    ss<<n; 
    string str = ss.str();
    return str;
}

更多

2017/2/3批注:
依然是文件输入输出流的内容,时至今日,我已经把这部分知识忘记的差不多了,标记一下,回头温习一下Java输入输出流。

补充一下这个问题的Java实现,Java实现非常简单,只需要调用包装类的valueOf方法即可

package com.way.algorithm;

/**
 * Test the Java implementation to transform a String to an int and 
 * in reverse transform an int to a String
 * @author reus
 *
 */
public class TypeExchange {
    public static void main(String[] args){
        String str1="1234";
        int x=Integer.valueOf(str1);
        System.out.println(x);
        String str2=String.valueOf(x);
        System.out.println(str2);
    }
}

结果

1234
1234