/ ************************************************* ************************************************** ** /
一般的に使用される文字列関数は、次のブレインマップで説明されています。string.hシリーズ関数の完全なリストについては、「C99およびC11用の新しい標準ANSICライブラリ」
/ *********を参照してください。************************************************** ***************************************** /
strlen()関数
以下にテストフィット()関数を示します。C文字定数系列特性の使用に注意してください。
#include <stdio.h>
#include <string.h> /*内含字符串函数原型*/
void fit(char *,unsigned int);
int main (void){
char mesg [] = "Things should be as simple as possible,""but not simper.";
puts(mesg);
fit(mesg,38);
puts(mesg);
puts("Let' LOOk at some more of the string");
puts(mesg+30);
return 520;
}
void fit(char *string,unsigned int size){
if(strlen(string)>size)
string[size]='\0';
}
出力は次のとおりです
fit()関数は、39番目の要素のコンマを文字「\ 0」に置き換え、puts()関数は、空の文字で出力を停止し、残りの文字を無視します。
strcat()関数
前のブレインマップでこの関数の使用法が説明されているので、コードに直接移動します
#include "stdio.h"
#include "string.h"
#define size 80
int main(){
char flower[size]="woaini";
char addon[50]="lala semll like older";
strcat(flower ,addon);
puts(flower);
puts(addon);
return 520;
}
結果は次のようになります。
花は変化していることがわかりますが、アドオンは変更されていません。
しかし、花の配列のサイズが十分に大きくない場合はどうなりますか?また問題はありますか?あなたがそのような懸念を持っているならば、それはあなたがもはや初心者ではないことを意味します。それでは、見下ろし続けましょう!
strncat()関数
strcat()関数は、最初の配列が2番目の文字列を保持できるかどうかを確認できません。
strncat(char *、char *、int)
3番目のパラメーターnは、n番目の文字まで2番目の文字列の内容を最初の文字列に追加することを意味します
#include "stdio.h"
#include "string.h"
#define size 80
int main(){
char flower[size]="woaini";
char addon[50]="lala semll like older";
strncat(flower ,addon,10);
puts(flower);
puts(addon);
return 520;
}
の結果
strcmp()関数
1.この関数は文字列の比較に使用されます
同時に、この関数は文字列のアドレスではなく、文字列の内容を比較することにも言及する価値があります。読者は自分で関数を設計するか、C標準ライブラリのstrcmp()関数を使用できます(文字列の比較用)。この関数は、数値を比較するのと同じように、比較演算子を使用して文字列を比較します。2つの文字列パラメータが同じ場合、関数は0を返します。それ以外の場合、関数はゼロ以外の値を返します。
#include "stdio.h"
#include "string.h"
#define size 80
int main(){
char flower[size]="woaini";
char addon[50]="woaini";
char *a="wobuaini";
printf("%d\n",strcmp(flower,addon));
printf("%d\n",strcmp(flower,a));
return 520;
}
実装の結果は次のとおりです。
注意深い友人が尋ねるかもしれませんが、花の配列のサイズは80文字ではありませんか?これに対する答えは、strcmp()関数が配列全体ではなく文字列のみを比較することです。これは、非常に優れています。関数。
2. strcmp()関数の戻り値
#include "stdio.h"
#include "string.h"
int main(){
printf("strcmp(\"A\",\"A\") is");
printf(" %d\n",strcmp("A","A"));
printf("strcmp(\"A\",\"B\") is");
printf(" %d\n",strcmp("A","B"));
printf("strcmp(\"B\",\"A\") is");
printf(" %d\n",strcmp("B","A"));
return 520;
}
上記の状況は、文字列の比較が、出力値を決定するために2つの文字列の最初の異なる文字のASCIIコードに基づいていることを示しています。3つの状況があります。
- 2つの文字列は等しく、0を返します
- 最初の文字列がアルファベットの2番目の文字列の前にある場合は、負の数を返します
- それ以外の場合は正の数を返します
strncmp()関数
strncmp()関数は、その名前が示すように、strcmp関数の拡張です。strcmp()関数は、別の文字が見つかるまで文字列内の文字を比較します。このプロセスは、文字列の最後まで続く場合があります。strncmp()関数が2つの文字列を比較する場合、異なる文字を比較するか、3番目のパラメーターで指定された文字数のみを比較できます。たとえば、「astro」で始まる文字列を検索するには、これらの5文字のみを検索するように関数を制限できます。
操作はstrcmp()関数に似ているため、実際の戦闘は開始されません。
strcpy()関数とstrncpy()関数
strcpy()関数の使用は、文字列の文字列全体のコピーでのみ実現できます。
1. strcpy()の他の属性
- strcpy()の戻り値の型はchar *で、最初の文字のアドレスである最初のパラメーターの値を返します。
- 最初のパラメーターは必ずしも配列の先頭を指しているとは限りません。この属性を使用して、配列の一部をコピーできます。
#include "stdio.h"
#include "string.h"
#define words "beast"
#define size 40
int main(){
const char *orig=words;
char copy[size]="be the best that you can";
char *ps;
puts(orig);
puts(copy);
ps=strcpy(copy+7,orig);
puts(copy);
puts(ps);
return 520;
}
出力結果
ご覧のとおり、psポインターが指す値はbeastです。これは、最初のパラメーターのアドレスであるcopy +7です。もう手に入れましたか?わかりにくい場合は下の写真をご覧ください
2.より慎重な選択:strncpy()
strcpy()とstrcat()の両方に同じ問題があり、どちらもターゲットスペースが文字列のコピーを保持できるかどうかを確認できません。したがって、strncpy()を使用して文字列をコピーする方が安全です。同様に、関数の3番目のパラメーターは、コピーできる最大文字数を指定します。
補足:sprintf()関数
まず、sprintf()関数はstring.hではなくstdio.hで宣言されていることに注意してください。
次に、コードの文字列を使用して、彼の使用法を説明します。
#include "stdio.h"
#include "string.h"
#define words "beast"
#define size 40
int main(){
char formal[2*size+10];
const char *orig=words;
char copy[size]="be the best that you can";
sprintf(formal," %-19s: %6.2f\n",orig,copy);
puts(formal);
return 520;
}
の結果
役に立ったと感じたら、親指を立ててコメントを残してから出発してください。ありがとうございます。