在ACM竞赛中,常常需要将读入的数字的每位分离出来,如果采用取余的方法,花
费的时间就会太长,这时候,我们可以将读入的数据当成字符串来处理,这样就方便、省
时多了。下面这个程序演示了求一个整数各位的和:
#include <string> #include <iostream> using namespace std; int main(){ string s = "123455"; int sum = 0; for(int i = 0;i<s.length();i++){ switch(s[i]){ case '0':sum+=0;break; case '1':sum+=1;break; case '2':sum+=2;break; case '3':sum+=3;break; case '4':sum+=4;break; case '5':sum+=5;break; case '6':sum+=6;break; case '7':sum+=7;break; case '8':sum+=8;break; case '9':sum+=9;break; } } cout << sum; }
sscanf函数很管用,它可以把一个字符串按你需要的方式分离出子串,
甚至是数字。下面这个程序演示了sscanf函数的具体用法:
#include <iostream> #include <string> using namespace std; int main(){ char a[100],b[100],c[100]; sscanf("122 3ss 3ww","%s %s %s",a,b,c); string s = a; cout << s <<endl; int p,l,k; sscanf("122 $122$333","%d $%d$%d",&p,&l,&k); cout << p <<endl; cout << l <<endl; }
有时候,string 对象与数值之间需要相互转换,下面这个例子详细说明了如何完成这
项工作:
#include <iostream> #include <string> #include <sstream> using namespace std; //C++方法:将数值转换为string string convertToString(double x) { ostringstream o; if (o << x) return o.str(); return "conversion error";//if error } //C++方法:将string转换为数值 double convertFromString(const string &s) { istringstream i(s); double x; if (i >> x) return x; return 0.0;//if error } int main(int argc, char* argv[]) { //将数值转换为string的第一种方法:C方法 char b[10]; string a; sprintf(b,"%d",1975); a=b; cout<<a<<endl; //将数值转换为string的第二种方法:C++方法 string cc=convertToString(1976); cout<<cc<<endl; //将string转换为数值的方法:C++方法 string dd="2006"; int p=convertFromString(dd)+2; cout<<p<<endl; return 0; }