+=と==について

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

+=と==について

#1

投稿記事 by 03life » 2年前

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
記事: 16
登録日時: 2年前

Re: +=と==について

#2

投稿記事 by 03life » 2年前

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

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

Re: +=と==について

#3

投稿記事 by みけCAT » 2年前

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

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

box
記事: 2002
登録日時: 13年前

Re: +=と==について

#4

投稿記事 by box » 2年前

コード:

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

コード:

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

03life
記事: 16
登録日時: 2年前

Re: +=と==について

#5

投稿記事 by 03life » 2年前

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

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

03life
記事: 16
登録日時: 2年前

Re: +=と==について

#6

投稿記事 by 03life » 2年前

box さんが書きました:
2年前

コード:

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

コード:

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

返信

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