[C++/C] 引数と配列2

double avg(int t[]);

int main() {
    
    int test[5];

    cout << "5人のテストの点数を入力してください。\n";
    for(int i=0; i<5; i++){
        cin >> test[i];
    }
    double ans = avg(test);
    cout << "5人の平均点は" << ans << "点です。\n";

    return 0; 
}

double avg(int t[]){
    double sum = 0;

    for(int i=0; i<5; i++){
        sum += t[i];
    }
    return sum/5;
}

ポインタを引数で渡すように良く書かれる

double avg(int* pT);

int main() {
    
    int test[5];

    cout << "5人のテストの点数を入力してください。\n";
    for(int i=0; i<5; i++){
        cin >> test[i];
    }
    double ans = avg(test);
    cout << "5人の平均点は" << ans << "点です。\n";

    return 0; 
}

double avg(int* pT){
    double sum = 0;

    for(int i=0; i<5; i++){
        sum += *(pT+i);
    }
    return sum/5;
}

$ g++ -o sample sample.cpp && ./sample
5人のテストの点数を入力してください。
33
12
14
12
11
5人の平均点は16.4点です。

### 文字列と配列
文字列は配列だけでなく、ポインタでも扱える

int main() {
    
    char str[] = "Hello";

    cout  << str << "\n";

    return 0; 
}
int main() {
    
    char* str = "Hello";

    cout  << str << "\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
sample.cpp: In function ‘int main()’:
sample.cpp:6:17: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
6 | char* str = “Hello”;
| ^~~~~~~
Hello

int main() {
    
    char str[] = "Hello";

    cout  << "Hello\n";

    for(int i=0; str[i]!='\0'; i++){
        cout << str[i] << '*';
    }
    cout  << "\n";

    return 0; 
}

c++の文字列は必ず\0で終わる

### 文字列の標準ライブラリ

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    
    char str[100];

    cout  << "文字列(英数字)を入力してください。\n";

    cin >> str;

    cout  << "文字列の長さは" << strlen(str) << "です。\n";

    return 0; 
}

strcatで文字列を連結する。strcpyは代入格納

int main() {
    
    char str0[20];
    char str1[10];
    char str2[10];

    strcpy(str1, "Hello");
    strcpy(str2, "Goodbye");
    strcpy(str0, str1);
    strcat(str0, str2);

    cout  << "配列str1は" << str1 << "です。\n";
    cout  << "配列str2は" << str2 << "です。\n";
    cout  << "配列str0は" << str0 << "です。\n";

    return 0; 
}

### practice

int max(int x[]){
    int maxnum = 0;
    for(int i=0; i<5; i++) {
        if(x[i] > maxnum) {
            maxnum = x[i];
        }
    }
    return maxnum;
}

int main() {
    
    int result[5];

    cout  << "テストの点数を入力してください。\n";

    for(int i=0; i<5; i++) {
        cin >> result[i];
    }

    int num = max(result);
    cout  << "テストの最高点は" << num << "点です。\n";

    return 0; 
}
int length(char* str){
    int i = 0;
    while(str[i]){
        i++;
    }
    return i;
}

int main() {
    
    char str[10];
    cout  << "文字列を入力してください。\n";

    cin >> str;
    int len = length(str);

    cout  << "文字列の長さは" << len << "です。\n";

    return 0; 
}

maxは最初から x[0]と宣言してしまった方が効率的

int max(int x[]){
    int m = x[0];
    for(int i=0; i<5; i++){
        
    }
}
int count(char str[], char ch){
    int n = 0;
    for(int i=0; i < strlen(str); i++){
        if(str[i] == ch){
            n++;
        }
    }
    return n;
}

int main() {
    
    char str[10];
    char ch;

    cout  << "文字列を入力してください。\n";

    cin >> str;

    cout  << "文字列から探す文字を入力してください。\n";
    cin >> ch;

    int n = count(str, ch);

    cout  << str << "の中に" << ch << "は" << n << "個です。\n";

    return 0; 
}