C++知识碎片整理(4)——string转int 2016/8/16 string和int类型数据的互转是经常使用到的功能,自然有很多的方法。 今天只记录我相对喜欢的一个string转int方法,其他方法在下方博文中有介绍 http://www.cnblogs.com/nzbbody/p/3504199.html
核心是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; // 30string—->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; }关于stringstream的用法,更多可以看: http://www.cppblog.com/Sandywin/archive/2007/07/13/27984.html 关于sstream类库所涉及到的C++标准库的知识: http://blog.163.com/hbu_lijian/blog/static/126129153201201710456994/
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