ACM(C++)の各種入力モードのまとめ

目次

序文:

1. 入出力機能

①cin---入力配列および文字列に適用(文字列内のスペースに関係なく)

②getline() --- 文字列全体(スペース文字も含む)を入力する場合に使用するのが適しています。

③getchar() --- キャリッジリターンを食べるためによく使われます

2. よくある具体的なケース

 ① 1次元配列(固定数)

説明を入力してください:

コード:

② 1次元配列(不定数)

説明を入力してください:

コード:

③二次元配列

説明を入力してください:

コード:

④文字列(固定数)

説明を入力してください: (スペース、改行)

コード:

⑤文字列(不定数)

説明を入力してください:

コード:

⑥文字列(全行)

説明を入力してください: 

コード:

要約:


序文:

入力の一般的な要件は、本体上で配列と文字列に分かれています。Niuke プラットフォームには、トレーニングできる ACM モデル アルゴリズムの質問が多数あります。

ここでは、一般的に使用される入出力関数とその使用方法のリストを示します。これは、すぐに開始し、いくつかの落とし穴を早期に回避するのに便利です。あまり時間をかける必要はなく、leetcode のブラシの準備に集中できます。質問。

1. 入出力機能

①cin---入力配列および文字列に適用(文字列内のスペースに関係なく)

#include <iostream>

注 1: cin はキーボードからデータを継続的に読み取ることができます。

注 2: cin はスペース、タブ、改行で区切られます。

注 3: cin は、最初の非スペース文字から区切り文字に遭遇するまで読み取ります。

注: endl オブジェクトを出力する場合、改行文字「\n」が出力されます。

簡単な例: 

    //单个输入
    int num;
    cin >> num;
    cout << num <<endl;

    //批量输入
    vector<int> nums(5);
    for (int i = 0; i < nums.size(); i++){
        cin >> nums[i];
    }
    //批量输出
    for (auto it = nums.begin(); it != nums.end(); it++){
        cout << *it << " ";
    }

②getline() --- 文字列全体(スペース文字も含む)を入力する場合に使用するのが適しています。

#include<文字列>

改行文字が見つかるまで、文字列の行を読み取ります。(スペースが入った場合にも読み取られます)

 簡単な例: 

    string s;
    getline(cin, s);
    cout << s << endl;

③getchar() --- キャリッジリターンを食べるためによく使われます

ラップするかどうかを決定するためによく使用されます

簡単な例:

char ch;
ch = getchar();
cout << ch << endl;

2. よくある具体的なケース

 ① 1次元配列(固定数)

3
1 2 3

説明を入力してください:

最初の行: 配列の長さを示す整数 n

2 行目: n 個の整数があり、数値はスペースで区切られています。

コード:

int n;
cin >> n; 
vector<int> nums(n); // 创建vector<int>承载
for(int i = 0; i < n; i++) {
	cin >> nums[i];
}

// 验证是否读入成功
for(int i = 0; i < nums.size(); i++) {
	cout << nums[i] << " ";
}
cout << endl;

② 1次元配列(不定数)

1 2 3 4

説明を入力してください:

1 行目: スペースで区切られた未知の数の整数があります。

これは、この問題に対処するために cin と組み合わせた while ループに適用されます。

コード:

vector<int> nums;
int num;
while(cin >> num) {
	nums.push_back(num);
	// 读到换行符,终止循环
	if(getchar() == '\n') {
		break;
	}
}

// 验证
for(int i = 0; i < nums.size(); i++) {
	cout << nums[i] << " ";
}
cout << endl;

③二次元配列

2 3
1 2 3
4 5 6

説明を入力してください:

1 行目: 最初の数字は配列の行数を示し、2 番目の数字は配列の列数を示します。

2行目:2次元配列の1行目の整数要素

3行目:2次元配列の2行目の整数要素

コード:

int a; // 行数
int b; // 列数

cin >> a >> b;

vector<vector<int>> nums(a, vector<int>(b));

for(int i = 0; i < a; i++) {
	for(int j = 0; j < b; j++) {
		cin >> nums[i][j];
	}
}

// 验证
for(int i = 0; i < a; i++) {
	for(int j = 0; j < b; j++) {
		cout << nums[i][j] << " ";
	}
	cout << endl;
}

④文字列(固定数)

3 abc def g
3
abc
def
g

説明を入力してください: (スペース、改行)

最初の数字 3 は文字列の数を示し、その後にスペースまたは改行で区切られた 3 つの文字列が続きます。

コード:

int n;
cin >> n;
vector<string> strs(n);
for(int i = 0; i < n; i++){
    cin >> strs[i];
}

//验证
for(int i = 0; i < strs.size(); i++){
    cout << strs[i] << " ";
}
cout << endl;

⑤文字列(不定数)

abc ab a d

説明を入力してください:

1行目: スペースで区切られた複数の文字列

コード:

vector<string> strs;
string str;
while(cin >> str) {
	strs.push_back(str);
	// 读到换行符,终止循环
	if(getchar() == '\n') {
		break;
	}
}

// 验证
for(int i = 0; i < strs.size(); i++) {
	cout << strs[i] << " ";
}
cout << endl;

⑥文字列(全行)

abc=def;ghi=jkl;

説明を入力してください: 

最初の行: 完全な文字列。特定の文字列の内容はセミコロンで区切られます。

コード:

vector<string> strs;

// 读入字符串
string s;
getline(cin, s);

// 将读入的字符串按照逗号分隔
	int p = 0;
	for(int q = 0; q < s.size(); q++) {
		p = q;
		while(s[p] != ';' && p < s.size()) {
			p++;
		}
		string tmp = s.substr(q, p - q);
		strs.push_back(tmp);
		q = p;
	}

// 验证
for(int i = 0; i < strs.size(); i++) {
	cout << strs[i] << " ";
}
cout << endl;

要約:

        上記のコードはローカル IDE で実行されています。入力文字列に遭遇した場合は、改行とスペースに特に注意してください。デバッグを出力して、それが正しいかどうかを確認することをお勧めします。

おすすめ

転載: blog.csdn.net/weixin_42373086/article/details/129758333