+=と==について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
03life
記事: 13
登録日時: 3週間前

+=と==について

#1

投稿記事 by 03life » 3週間前

atcoderのPlacing marblesという問題についての質問です。
https://atcoder.jp/contests/abs/tasks/abc081_a

この回答をみてみると
----------------------------------
#include <stdio.h>

int main(void)
{
char s[3];
int x = 0,i;

scanf("%s",s);

for(i = 0;i < 3;i++) {
x += s == '1';
}

printf("%d",x);

return 0;
}
-----------------------------------
なのですが、
for(i = 0;i < 3;i++) {
x += s == '1';
}
ここ(x += s == '1';)の意味を教えていただきたいです。

僕は、s[1]のとき1なら xに1加算して次はs[2]を評価するのだと思いました。
なぜこの書き方なのか、ifを使わなくても条件をつけることができるのか疑問です。

説明が下手で申し訳ないのですがどうかよろしくお願いいたします。

03life
記事: 13
登録日時: 3週間前

Re: +=と==について

#2

投稿記事 by 03life » 3週間前

forのなかのsのあとには []がつきます。
なぜか消えていました
https://gyazo.com/d980cdd2d4bcd3cf78bc19d4cba66aad

アバター
みけCAT
記事: 6432
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: +=と==について

#3

投稿記事 by みけCAT » 3週間前

03life さんが書きました:
3週間前
ここ(x += s[​i] == '1';)の意味を教えていただきたいです。
==演算子は、両辺を比較し、等しければ1、等しくなければ0という結果になります。
この比較結果の値を、+=演算子によってxに加えています。
03life さんが書きました:
3週間前
forのなかのsのあとには []がつきます。
なぜか消えていました
[​/i]が無くても、[​i]は斜体タグと認識されてしまいます。
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

※この記事内の[​i]は、U+200Bを挟むことでタグとしての認識を回避しています
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 1787
登録日時: 10年前

Re: +=と==について

#4

投稿記事 by box » 3週間前

コード:

x += s[i] == '1';
は、次のifi文と同じ意味を持ちます。

コード:

if (s[i] == '1') {
    x += 1;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

03life
記事: 13
登録日時: 3週間前

Re: +=と==について

#5

投稿記事 by 03life » 3週間前

みけCAT さんが書きました:
3週間前
03life さんが書きました:
3週間前
ここ(x += s[​i] == '1';)の意味を教えていただきたいです。
==演算子は、両辺を比較し、等しければ1、等しくなければ0という結果になります。
この比較結果の値を、+=演算子によってxに加えています。
03life さんが書きました:
3週間前
forのなかのsのあとには []がつきます。
なぜか消えていました
[​/i]が無くても、[​i]は斜体タグと認識されてしまいます。
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

※この記事内の[​i]は、U+200Bを挟むことでタグとしての認識を回避しています
ありがとうございます!納得しました。
タグの件了解しました。

03life
記事: 13
登録日時: 3週間前

Re: +=と==について

#6

投稿記事 by 03life » 3週間前

box さんが書きました:
3週間前

コード:

x += s[i] == '1';
は、次のifi文と同じ意味を持ちます。

コード:

if (s[i] == '1') {
    x += 1;
}
ありがとうございます!
ifと同じ意味で使えることを覚えておきます!!

返信

“C言語何でも質問掲示板” へ戻る