文字配列と文字列の使用

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

おすすめ

転載: blog.csdn.net/qq_52049228/article/details/129632427
おすすめ