7-1正整数A+B(15分)

6743 ワード

正の整数A+B(15分)
問題の目標は簡単で、2つの正の整数AとBの和を求めることであり、そのうちAとBは区間にある[1000].少し面倒なのは、入力が2つの正の整数であることを保証しないことです.入力形式:
1行にAとBを入力し、その間をスペースで区切ります.問題は、AとBは必ずしも要求を満たす正の整数ではなく、範囲外の数字、負数、小数点の実数、さらには文字化けの山である可能性があることだ.注意:入力に現れた1番目のスペースをAとBの区切りと見なします.タイトルは、少なくとも1つのスペースが存在し、Bが空の文字列ではないことを保証します.出力フォーマット:
入力が2つの正の整数である場合、フォーマットA+B=と出力されます.入力が要求に合わない場合は、対応する位置で出力しますか?明らかにこの時も.|入力サンプル|出力サンプル|
入力サンプル
出力サンプル
123 456
123 + 456 = 579
22. 18
? + 18 = ?
-100 blabla bla…33
? + ? = ?
ピットポイント:1.A,Bはいずれも【11000】の正の整数である.2.最初のスペースがBになるので、Bは12 3のような標準的な入力ではないかもしれません.3.Aは空の文字列である可能性があります
#include 
#include
#include
using namespace std;
string a, b;int flag = 1,sum=0;
void fun(string &a)
{   
	int num = atoi(a.c_str());        //atoi      int,
	                                  //  c_str()   string  char*    
	if (a.length() <= 4 && num >= 1 && num <= 1000 && to_string(num) == a)
		sum += num;                  //           
	else                             //to_string() int   string, a              
	{
		a = "?";                     //         “?”
		flag = 0;
	}
}
int main()
{
	
	getline(cin,a);
	b=a;
	b.erase(0, b.find_first_of(" ")+1);//             
	a.erase(a.find_first_of(" "));    //             
	
	fun(a);
	fun(b);
	cout << a << " + " << b << " = ";
	if (flag) cout << sum;
	else cout << '?';
}


atoi()文字列回転数値詳細#テストデータはすべて地元で走っている自分のサンプルで、検出されていないかもしれませんが、大物たちが手動で間違いを報告することを歓迎します.へへへへ文字列と数字の間の相互変換は直接セットで、ノートはまだ整理中です.