先来看sstream的使用
string line; while(getline(cin,line)) { int sum=0,x; stringstream ss(line); while(ss>>x) { cout<<"x="<<x<<endl; sum=sum+x; } printf("sum=%d\n",sum); }
上面就是完整代码,用来解决一行的正式相加的问题。
上面有个细节是:x已经是整数了,不需要再去-‘0‘。
但是使用sstream的方式太慢了
下面来看使用getchar()函数的方式:
int readchar() { int x; for(;;) { x=getchar(); if(x==‘ ‘) { continue; } if(x==‘\n‘||x==‘\r‘) { return 0; } return x; } } int main() { for(;;) { int sum = 0,x; while(x = readchar()) { if(x == EOF) { return 0; } sum = sum + x - ‘0‘; } printf("sum=%d\n",sum); } }
上面的readchar()函数的作用是,遇到空格就跳过,遇到回车就返回0退出;这种方式非常快,但是使用有局限性,比如说如果空格的两边不是整数,而是字符串,那么就不可以使用这种方式。
总的来说,如果是处理字符串,那么使用string是很好的方式,如果不是处理字符串,那么使用getchar()也不错。
原文:https://www.cnblogs.com/TorettoRui/p/10416482.html