ためすう

連続した文字列を使う (C++)

2019-12-15

やったこと

連続した文字列を使いたい時、どのように指定するのかやってみます。

今回は、ある1文字が連続した場合です。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s1(3, 'A');
    string s2(2, 'X');

    cout << s1 << endl;
    cout << s2 << endl;
}

出力結果

AAA
XX

整数かどうかを確かめる (C++)

2019-12-15

やったこと

値が整数かどうかをみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    double d1 = pow(3, 0.5);
    double d2 = 2.0;

    cout << (d1 == floor(d1)) << endl;
    cout << (d2 == floor(d2)) << endl;
}

出力結果

0
1

参考

ラムダ式を使ってみる (C++)

2019-12-14

やったこと

小数点の桁数を10桁で指定してみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    auto add = [&](int a, int b) {
        return a + b;
    };

    cout << add(2, 3) << endl;
}

出力結果

5

参考

小数点の桁数を指定する (C++)

2019-12-14

やったこと

小数点の桁数を10桁で指定してみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    double ans = pow(2, 0.5);

    printf("%.10f\n", ans);

    cout << fixed << setprecision(10);
    cout << ans << endl;
}

出力結果

1.4142135624
1.4142135624

char を string に変換する (C++)

2019-12-10

やったこと

char 型のデータを string 型に変換してみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s1 = "xyz";

    cout << typeid(s1[1]).name() << endl;

    string s2 = {s1[1]};
    cout << typeid(s2).name() << endl;
    cout << s2 << endl;
}

出力結果

c
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
y

tolower, toupper を使ってみる (C++)

2019-12-10

やったこと

tolower, toupper を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s1 = "abcdef";
    string s2 = "ABCDEF";
    s1[4] = toupper(s1[4]);
    s2[2] = tolower(s2[1]);

    cout << s1 << endl;
    cout << s2 << endl;
}

出力結果

abcdEf
ABbDEF

参考

accumulate を使ってみる (C++)

2019-12-08

やったこと

合計を計算するため、accumulate を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
    // 配列
    int A[] = {1, 3, 5};
    cout << accumulate(A, A + 3, 0) << endl;
    cout << accumulate(A, A + 3, -2) << endl;

    // ベクター
    vector<int> B = {2, 4, 8};
    cout << accumulate(B.begin(), B.end(), 0) << endl;
    cout << accumulate(B.begin(), B.end(), -3) << endl;
}

出力結果

9
7
14
11

参考

sprintf での文字列の表示 (C++)

2019-12-08

やったこと

文字列を sprintf で表示する方法について、いくつか試してみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

#include <bits/stdc++.h>
using namespace std;

int main() {
    char s[] = "abcde";
    string s2 = "xyzab";
    char c1 = s[1];


    printf("s: %s\n", s);
    // char に変換する必要がある
    printf("s2: %s\n", s2.c_str());
    printf("c1: %c\n", c1);
}

出力結果

s: abcde
s2: xyzab
c1: b

ceil, floor, round を使ってみる (C++)

2019-12-08

やったこと

下記の関数を使ってみます。

  • ceil
  • floor
  • round

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    cout << "ceil" << endl;
    cout << ceil(5.4) << endl;
    cout << ceil(5.9) << endl;

    cout << "floor" << endl;
    cout << floor(5.4) << endl;
    cout << floor(5.9) << endl;

    cout << "round" << endl;
    cout << round(5.4) << endl;
    cout << round(5.9) << endl;
}

出力結果

ceil
6
6
floor
5
5
round
5
6

参考

整数値の最大値、最小値 (C++)

2019-12-07

やったこと

整数の最大値と最小値について確認してみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    printf("short int: %d ~ %d\n", SHRT_MIN, SHRT_MAX);
    printf("unsigned short int: 0 ~ %d\n", USHRT_MAX);
    printf("int: %d ~ %d\n", INT_MIN, INT_MAX);
    printf("unsigned int: 0 ~ %u\n", UINT_MAX);
    printf("long int: %ld ~ %ld\n", LONG_MIN, LONG_MAX);
    printf("unsigned long int: 0 ~ %lu\n", ULONG_MAX);
    printf("long long: %lld ~ %lld\n", LLONG_MIN, LLONG_MAX);
    printf("unsigned long long: 0 ~ %llu\n", ULLONG_MAX);
}

出力結果

short int: -32768 ~ 32767
unsigned short int: 0 ~ 65535
int: -2147483648 ~ 2147483647
unsigned int: 0 ~ 4294967295
long int: -9223372036854775808 ~ 9223372036854775807
unsigned long int: 0 ~ 18446744073709551615
long long: -9223372036854775808 ~ 9223372036854775807
unsigned long long: 0 ~ 18446744073709551615