1. 文字配列
定義と初期化
文字配列は、要素が文字データ型の配列です。例: char c[6],char[3][4];
文字配列の初期化は、文字ごとに割り当てることができ、文字列定数で割り当てることもできます。
たとえば、 char ch[5]= {'b','o','y'} ;= {"boy"} ;= "boy" ; 足りない場合は、自動的に \0 が割り当てられます。" " で値を代入するときは \0 でなければなりません。そうしないと機能しません。
char ch[5]= {'b','o','y','\0'} ; 文字配列の末尾を示すために '\0' を追加します。
文字「\0」のASCIIコード値は0なので同じで、NULLと同じ意味です。
二、ひも
C言語には文字列変数がなく、文字列は文字配列で処理される
文字列の終わり: '\0'
char fruit[ ][7]={"リンゴ",オレンジ","バナナ"};
1. 二次元配列の定義と出力方法 1
#include <stdio.h> //二维数组的定义与打印方法一
int main(int argc, const char *argv[])
{
char fruit[][20]={"appLe", "orange","watermelon"};
int m, n,i,j;
n=sizeof(fruit)/sizeof(fruit[0]);//整个二维数组所占用的空间/每一行所占用的空间=行数
m=sizeof(fruit[0])/sizeof(char );//每一行所占用的空间/任何一个元素所占用的空间=列数
for (i=0;i<n;i++ ){
for (j=0;j<m;j++ ){
putchar(fruit[i][j]);
}
putchar('\n');
}
return 0;
2. 二次元配列 II の定義と出力方法
#include <stdio.h>
int main(int argc, const char *argv[] )
{ //二维数组的定义与打印方法二
char fruit[ ][20]={"apple","orange","watermelon"};
int n, i;
n=sizeof(fruit)/sizeof(fruit[0]);
for (i=0;i<n;i++ ){
printf( "%s\n",fruit[i]);
putchar('\n');
}
return 0;
打印结果为:apple
orange
watermelon
3. 演習: 文字列を逆順に出力する
①文字列をそのまま入力できない方法
#include <stdio.h>
int main(int argc, const char *argv[] ) //字符串不可自行输入的方法
char arr[ ]="welcome " ;
int n, i;
n=sizeof(arr )/sizeof(char );
for(i=n- 1:i>=0:i--)
putchar(arr[i]);
putchar('\n');
return 0;
}
②文字列反転出力方法1:出力は逆順
#include <stdio.h> //字符串逆输出方法一:输出是逆序
#include <string.h>
int main(int argc, const char *argv[ ] )
char arr[20];
int n, i;
printf("please input a string:\n");
gets(arr);
n=strlen(arr );
for(i=n-1;i>=0;i--)
putchar(arr[i]);
putchar('\n');
return 0;
}
③文字列反転出力方法2:入力後逆順
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[ ])
{
char arr[20]; //字符串逆输出方法二:输入完逆序
int n,
i, j,temp;
pr intf("please input a string:\n");
gets(arr);
n=strlen(arr);
i=0,j=n-1;
while(i<j){
temp=arr[i];
arr[i]=arr[j];
arr [ j ]=temp ;
i++ ;
j-- ;
}
puts(arr);
putchar('\n' );
return 0;
}
文字列関数の 3 つ、strlen、strcy、strcat、strcmp 関数
ヘッダファイル #include <string.h>
①文字列の長さを求める関数strlen
長さに '\0' は含まれません
使い方:
char s[ ]={'1','2'}
int n;
n=strlen(s);
\ 69: 8 進数の69を表します
\x 59: 16 進数の69を示します
②文字列コピー関数 strcpy
フォーマット: strcpy(文字配列 1, 文字列 2)
関数: 文字列 2 を文字配列 1 にコピーする
戻り値:文字配列1の先頭アドレスを返す
説明: 文字配列 1 は十分な大きさでなければならず、コピー時に '\0' が一緒にコピーされます
#include <stdio.h>
#include<string. h>
int main(int argc, const char *argv[ ] )
{
char a[ ]="lalalala";
char b[20];
strcpy(b,a);
puts(a);
puts(b);
return 0;
}
③文字列接続関数 strcat
書式: strcat(文字配列1、文字配列2)
機能: 文字配列 2 を文字配列 1 の後ろに接続する
戻り値:文字配列1の先頭アドレスを返す
説明: 文字配列 1 は十分な大きさでなければなりません。接続前はどちらの文字列も '\0' で終わります; 接続後、文字列 1 の '\0' は取り消され、新しい文字列の最後に '\0' が追加されます
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[ ] )
char a[100 ]= "yingyang
char b[ ]= "kuaixian" ;
strcat(a,b);
puts(a);
puts(b);
return 0;
}
④文字列比較関数 strcmp
フォーマット: strcmp(string1, string2);
比較規則: 異なる文字 '\0' が検出されるまで、2 つの文字列を左から右 (ASCII コード) に 1 つずつ比較します。
戻り値: int 型の整数を返します
a. 文字列 1<文字列 2 の場合、負の整数 -1 を返します
b. 文字列 1>文字列 2 の場合、正の整数 1 を返す
c. 文字列 1 == 文字列 2 の場合、0 を返す
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[] )
{
char a[ ]="abc";
char bi ]="ab"
pr intf(”%d\n",strcmp(a,b));
return 0;
}
第 4 に、文字列関数の拡張使用法
①strncpy(p,p1,n) 指定した長さの文字列をコピー: p の n 文字を直接置換
#include <stdi0.h>
#include <string.h>
#define N 30
int main(int argc, char *argv[])
char src[] ="makeru" ;
char dest[N] = ".com.cn ;
str@cpy(dest,src,4);
puts(src);
puts (dest) ;
return 0;
}
结果为:makeru
make.cn
②strncat(p,p1,n) 指定した長さの文字列を追加
#include <std10. h>
#include <string.h>
#define N 30
int main(int argc, char *argv[])
{
char src[] ="makeru" ;
char dest[N] =".com.cn" ;
strncat(dest, src, 4);
puts(src);
puts(dest) ;
return 0;
结果为: makeru
.com.cnmake
③3strcasecmp は大文字と小文字の比較文字列を無視します
④strncmp(p,p1,n) 指定した長さの文字列を比較
#include <std10. h>
#include <string .h>
#define N 38
int main(int argc, char *argv[])
{
char s1[] =
QUIT ;
char s2[] =
quit" ;
printf( "%d\n", strncmp(s1, s2, 4));
printf( "%d\n",strcasecmp(sl, s2));
return 0;
}
⑤strchr(p,c) 文字列の中から指定された文字を探す
#include <stdio. h>
#include <string.h>
int main(int argc, const char *argv[] )
char a[]=" cbusnjanjzhy";
int ch;
ch='z' ;
printf("%p %p \n" ,a,strchr(a,ch)); //字符串起始位置和查找到的位置一比较即可得出
return 0;
}
⑥strstr(p,p1) 文字列検索
#include <stdio. h>
#include <string.h>
{
int main(int argc, char *argv[])
char s[] = "how are you" ;
char subs[] = "are ;
0
printf( "%d\n", strstr(s, subs)-s); //查找到的位置减去字符串起始位置即可
return 0;
⑦isalpha()で英字かどうかチェック
⑧isupper() は大文字のアルファベットかどうかをチェックします
⑨islower() は小文字の英字かどうかを調べる
⑩isdigit() 数字かどうか調べる
#include <stdio h>
#include <ctype.h>
int main(int argc, char *argv[])
{
int ch;
while ((ch = getchar()) != EOF) { //判断不是特殊输入ctry+D
if (isalpha(ch)) { //判断是不是字母
if (isupper(ch)) //判断字母是不是大写
printf("Upper:%c\n", ch);
if (islower(ch)) //判断字母是不是小写
printf(" Lower:%c\n" , ch);
}
if (isdigit(ch)) //判断是不是数字
printf("Digit:%d %c\n", ch-'θ', ch); //字符转换成数字
putchar(ch);
}
return 0;
}
#include <stdio. h>
#include <ctype . h>
int main(int argc, char *argv[])
int ch;
while ((ch = getchar()) != EOF) {
if (isalpha(ch)) { //判断是不是字母
if (isupper(ch)) {
ch = tolower(ch); //是大写转为小写
}
else {
ch = toupper(ch); //是小写转为大写
}
}
printf( "%c\n", ch);
}
return 0;
}