【第1部】C言語(K&R検証)編
0018.足し算を実装する(符号対応版)
ソース紹介
ここでは
0010.足し算を実装するのサンプルを
+ - 符号に対応させたものです。
CPPファイルに記述
#include <iostream>
#include <cstdio>
#include <cctype>
#include <string>
using namespace std;
/*
sを整数に変換する(+,-対応版)
*/
int atoi(char s[]) {
int i, n, sign;
for (i = 0; isspace(s[i]); i++) {
; //空白を飛ばす
}
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '-' || s[i] == '+') {
i++; //符号を飛ばす
}
for (n = 0; isdigit(s[i]); i++) {
n = 10 * n + (s[i] - '0');
}
return sign * n;
}
/*
足し算の実装
*/
int main()
{
string leftstr;
string rightstr;
getline(cin, leftstr);
getline(cin, rightstr);
cout << atoi(leftstr.c_str()) + atoi(rightstr.c_str()) << endl;
return 0;
}
出力
サンプル説明
出力例を見てもらえればわかるように、今回のバージョンでは
atoi()関数が符号に対応しています。
しかしながら
0010.足し算を実装するでは、すでに
cinからstringに入れる手法で
符号対応もできています。
なのでこのサンプルの見どころは
atoi()関数内の
sign = (s[i] == '-') ? -1 : 1;
の部分でしょうか。
signに
-1もしくは1を入れてます。このことは、リターン時に
という形で記述されています。
K&Rでの記述
元になったのは
第3章:制御の流れに記述されています。
ループの説明のところです。