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; }