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