目次
1. キャラクター
タイプ: 文字
入力: getchar
出力:putchar
例:
#include <stdio.h>
void main()
{
char ch;
while (ch = getchar())
{
if (ch == EOF)break;
printf("%d", ch);
putchar(ch);
}
return;
}
実行結果:(8行)
a^Zb
97a
26
a
97a
10
^Z
説明する:
「a^Zb」と入力して Enter キーを押し、「a」と「^Z」の 2 文字を入力し、次に「a」を入力して Enter を押し、「a」の 2 文字と改行文字を入力してから「^Z」を入力します。プログラムは終了します。
注1:
「\0」の ASCII コードは 0、「^A」~「^Z」の ASCII コードは 1 ~ 26、そのうち改行文字「\n」は 10、「^Z」は 26、ただし、入力バッファの領域が空の場合に '\n' の後に '^Z' が表示されると、'^Z' の ASCII コードは -1 となり、ファイルの終わりを示します。
注2:
EOF は定数 -1 であり、OJ の入力と出力は多くの場合 EOF によって制御されます。
注3:
10 番の '\n' と 26 番の '^Z' は両方とも getchar の切り詰めです。文字列の行を入力すると、getchar は最初の '\n' または '^Z' のみを読み取ることができ、残りは破棄されます。
2. C言語の文字列
1. 文字列の表現
C言語では文字列はchar配列で表現され、文字列の末尾に終了を示す「\0」が付加されます。
2. 入力と出力
入力: 取得
出力:put
例:
#include <stdio.h>
#include<string.h>
void main()
{
char str[]="abcde";
puts(str);
gets(str);
printf("%d\n", strlen(str));
puts(str);
return;
}
実行結果1:(4行)
abcde
^Za
5
abcde
実行結果2:(5行)
abcde
a^Zb
2
a?
改行文字と ^Z は両方とも gets 関数の切り捨てであることがわかります。
改行文字は gets によって読み取られて破棄され、gets は getchar と同じように ^Z を処理します。バッファーが空の場合は -1 文字、バッファーが空でない場合は 26 番目の文字です。
3. よく使う機能
(1) strcat ファンクション文字列接続
文字列の連結 文字列の連結
例:
#include <stdio.h>
#include<string.h>
void main()
{
char str1[10] = "ab";
char str2[] = "cd";
printf("%d %d\n", strlen(str1), strlen(str2));
strcat(str1, str2);
printf("%d %d\n", strlen(str1), strlen(str2));
printf("%s %s", str1, str2);
return;
}
操作結果:
2 2
4 2
abcd cd
strcat(str1, str2) 関数は、str2 を str1 の後ろにコピーします。
(2) strcpy関数とstrncpy関数 - 文字列コピー
strcpy(str1,str2) は、str2 を str1 の場所にコピーします。
strncpy(str1,str2,n) は、str2 の最初の n 文字を str1 の位置にコピーします。
(3) strcmp関数 - 文字列比較
strcmp(str1,str2) は辞書編集順に比較され、戻り値 >0、=0、<0 はそれぞれ str1>str2、str1==str2、str1<str2 を表します。
(4) strlen と sizeof - 文字列の長さ
sizeof はキーワードであり、配列の長さを計算します。
strlen は、文字列内の '\0' を除く文字数を計算する関数です。
(5) strlwr および strpr 関数 - 文字列の大文字と小文字の区別
strlwr は大文字を小文字に変換します
strpr は小文字を大文字に変換します
概要: C スタイルの文字列入力 - cin または getline または get、cin はスペースまたは改行で終わり、getline と get は両方とも 1 行を読み取ります。
getline 関数は改行文字を読み取って破棄しますが、get 関数はパラメーターを受け取る場合は改行文字を入力バッファーに保持します。get 関数はパラメーターを受け取らない場合は改行文字を読み取って破棄できます。
3、文字列クラス
1. 定義、初期化、入出力
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str="abc";
cin>>str;
cout<<str;
return 0;
}
2. 文字列の割り当て、長さの計算、および反転
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1="abc";
string str2=str1;
reverse(str2.begin(),str2.end());
cout<<str1<<" "<<str1.length()<<" "<<str2;
return 0;
}
3. 文字列から文字を取得する
配列形式または反復子形式にすることができます。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str="abcde";
cout<<str[2];
string::iterator it=str.begin();
cout<<*it;
it=str.end()-1;
cout<<*it;
return 0;
}
出力:
ケー
4. 文字列の比較と接続
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1="abc",str2="def",str3="def";
if(str1<str2)cout<<"str1<str2\n";
if(str2==str3)cout<<"str2=str3\n";
cout<<str1+str2;
return 0;
}
出力:
str1<str2
str2=str3
abcdef
5. 文字列を文字配列に変換する
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str="abc";
const char *p1=str.c_str();
char *p2=new char[20];
strcpy(p2,p1);
cout<<p2;
return 0;
}
6. 文字列内の文字を検索する
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str="abca";
cout<<str.find('a')<<" "<<str.find('a',2);
return 0;
}
出力:
0 3
C++ 教科書に記載されている一般的な文字列関数を添付します。