プログラミングC: 投稿 10 – C言語で文字列
コンテンツ
AT ALL 入力Cで行われた 我々は宣言する方法に慣れてきました, Cのエントリと文字列単に. この記事では、例の詳細をお話します, 宿題チェーン .
1. 概要
文字列は配列として扱われます 1 文字としてchar型の要素の寸法, 数字やなどの特殊文字 +, -, *, /, $, #,...
慣例により, シーケンスは、ヌル文字で終了します (「 0」 : 登録turong).
例: 次のように格納されている文字列「Infoworldの」:
2. いくつかの宣言, 初期化文字列
我々は、次の例を考えて:
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> int main() { // khai bao chuoi co toi da 50 ky tu char name[50]; printf("Hi, What is your name? \nMy name is: "); gets(name); printf("Hi %s, welcome to C language\n", name); // khoi tao chuoi ngay khi khai bao char myLove[] = "Nguyen Thi Lap Lanh"; puts(myLove); return 0; }
結果:
こんにちは, お名前は何ですか?
私の名前は: グエン·ヴァン·泉
こんにちはグエン・ヴァン・クアン, C言語へようこそ
グエン・ティ輝き
上のプログラムで, 私は、関数を使用しています プット 文字列をプリントアウトするMylove, これはまた、出力文字列に関数であります.
上記のように我々が見ることができる宣言鎖又は中鎖文字列に値を割り当て、インポート宣言ちょうどいいです. しかし、我々は次のように値を割り当て、その後宣言することはできません:
char name[50]; name = "Nguyen Van Quan"; // error
宣言したい場合は、値を代入, 私たちは、文字列のコピー機能を使用する必要があります。 strcpyの 図書館で string.hの 次のように値を保存します:
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> #include <string.h> int main() { char name[50]; strcpy(name, "Nguyen Van Quan"); puts(name); return 0; }
3. Cの文字列のいくつかの例
3.1 例 1: 文字列内の単語の数をカウント
文字列を入力し、文字列内の単語の数をカウントしてください. VDチェーン “グエン·ヴァン·泉” 持っている 3 から.
これを行うには, 我々は、連続して文字のそれぞれを参照し、スペースで単語を発散します. そこでこの記事では、文字列にスペースの数をカウントするために提供されます. 文字列の場合 1 単語、スペースなし, ストリング 2 そこから 1 間のスペース 2 そこから. Nは一般には、N-1スペースが存在することになるからです.
次の問題は、スペースをカウントする方法であります? シンプル, これは、最初のオープン文字列として知られている文字の配列であります, 私たちは、文字が文字の連鎖を調べるに向ける閲覧することができますスペースです. しかし、文字列内のすべての文字をブラウズしたいです (文字配列) 彼らは、文字列の文字数を知っている必要があります (配列の要素数).
幸いなことに、図書館で string.hの 我々は、機能として、文字列の長さを取得する機能を持っています strlen関数. (STR – 文字列, のみ – 長さ).
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> #include <string.h> // for strlen function int main() { char s[50]; printf("Enter a string: "); gets(s); int i, count = 0; // count - bien dem so luong dau cach for (i = 0; i < strlen(s); i++ ) { if(s[i] == ' ') { count++; } } printf("Number word in string is: %d\n", count + 1 ); return 0; }
かなり簡単なコード, あなたが読んで, NHEを理解し、テストします.
しかし、我々はノート上のコードを持っています:
- 文字を表現するために、我々は、アポストロフィペアを置きます, その後、我々は引用符で文字列を入れて. 上記スペースは、単一引用符で囲まなければならないと私たちは比較することができます 2 このような比較を持つ文字 2 数, やはり 2 チェーンはそう比較することはできません, あなたはについての詳細を読むことができます 文字列を比較します.
- 文字列は文字の配列であるため、, 配列アクセスをsとして、私たちはその後、文字列s中のi番目の文字を利用したいはずです[で].
- この例では、ときにのみ、より大きな鎖長を適用します 0 そして上部の余分な白い看板, 終了または単語の間.
- 上記のように、ループ, 我々は条件を持っています
i < strlen(s)
, しかし、文字列sの文字数をカウントするために、再びstrlenをループの性質. だから我々は、各反復で条件に直接書き込む場合, プログラムは、sの文字の数をカウントするために、コマンドループSTRLENを実行する必要があります. これは冗長であり、長いプログラムの実行を行います. だから我々は入れます 1 次のように変数は、文字列の長さは出ています:
int len = strlen(s); for (i = 0; i < len; i++ ) { if(s[i] == ' ') { count++; } }
3.2 例 2: 標準化されたシーケンス
文字列を入力して、上部にあるすべての余分なスペースを削除してください, 最後の場合は、単語間.
この問題は、ソフトウェアの問題のために重要です, 保存された後にするとき, 入力データは、標準化することが注目されます, 何の黒字または赤字はプロセスでエラーが発生することはありませんし、追求します.
- 文字列sの最初の文字がs、その後、スペースです[0] スペース, 我々は行ったようにそれを削除します.
- 単語間の文字冗長すなわちsの場合[で] そして、s[のi 1] スペースに沿って. 我々は削除しました 1 で 2 okです, 単語が区切られますので、 1 スペースが保持している必要があります 1 スペース.
- 最後列の文字がスペースで、我々は最後の文字がヌル文字で割り当てることによって、それを削除します
'\0'
終了した. 最後の文字が配列nの要素であることを忘れないでくださいa[n-1]
, その文字列の文字がありますs[ strlen(s) - 1 ]
.
次の問題は、削除する方法です 1 文字列内の文字? 私たちは、文字列のコピー機能を使用する上であなたは例を見て, および削除します 1 または文字列の文字数、私たちは、この機能を使用しますが、コピーのアドレスに使用されます.
文字列s内のjの文字に私から文字を削除するには, 我々は、コマンド strcpy(&s[i], &s[j+1]);
. 本質は、我々はのアドレスをコピーしていることです s[j+1]
のアドレス s[i]
.
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> #include <string.h> int main() { char s[50]; printf("Enter a string: "); gets(s); // delete all space at start of string while( s[0] == ' ' ) strcpy(&s[0], &s[1]); // delete all space at end of string while( s[ strlen(s)-1 ] == ' ') s[ strlen(s)-1 ] = '\0'; // delete all space between two word int i; for(i = 0; i < strlen(s); i++) { if( s[i] == ' ' && s[i+1] == ' ') { strcpy(&s[i], &s[i+1]); i--; // why??? } } printf("s=%s.\n", s); return 0; }
OK. あなたはNHEを実行します. 先頭に文字列余分のスペースを入力し忘れないでください, 最後の, チェックする間.
演習は、あなたのためのより多くがそうであるように、小さな問題は、コードの行を見ることです i--; // why???
そして、なぜこの行を考えます? 私は減少しなければならないのはなぜ 1?
4. 文字列と文字に関するいくつかの関数
テスト機能シンボル. (ライブラリ内のこれらの機能 のctype.h) 異なる値に対するtrueの場合、機能 0. falseの場合、関数値によって 0.
- int型はisalpha(int型のC) : チェックアルファベットの文字はありません.
- int型のisdigit(int型のC) : チェック桁の文字ではない.
- int型のislowerは(int型のC): 小文字をチェックしていない.
- INT isupper(int型のC): 大文字をチェックしていない.
- INT iSPACE(int型のC): チェックキャラクタは空です (\N, スペース, \トン).
文字列処理関数. (この関数は、ライブラリ内に位置しています string.hの)
- int型のstrlen(CHAR * S) 文字列sの長さを返す;
- チャー* strupr(CHAR * S) 大文字の文字列sへの小文字の変更.
- チャー* strlwr(CHAR * S) 小文字に大文字に変更.
- チャー* STRCAT(CHAR * S1, CHAR * S2) 文字列への接続文字列S1 S2;
- int型にstrcmp(CHAR * S1, CHAR * S2) 負の値であれば文字列s1と小さい文字列s2. と正の価格難民のためのより大きな文字列文字列S1 S2場合. の値を返します 0 もし文字列s2を持つ文字列s1.
- INT関数strcmpi (CHAR * S1, CHAR * S2) 比較する 2 文字列が、大文字と小文字を区別しません.
- char *文字のstrcpy(CHAR * S1, CHAR * S2) 文字列にコピー文字列S1 S2.
- チャー*のstrncpy(CHAR * S1, CHAR * S2, int型のn) 文字列s1にs2の文字列の最初のn文字をコピーします
- チャー* strnset(CHAR * S ,int型のC, int型のn) n回は、文字列s内の文字cをコピーする.
- チャー* STRSTR(CHAR * S1, CHAR * S2) 文字列s1で文字列s2の発生を探す. あなたは文字列s1の関数列のアドレスを見つけた場合. NULLとは対照的に.
- チャー* strrevは(CHAR * S) 文字列を逆に対処するために、逆s.Neu成功した文字列関数を使用して、.
エクササイズ
- 指定された文字列名とは別のプログラムを書きます. VDは、輝くグエンティの名前=>分離亜麻
- 自分の名前の文字列を標準化し、プログラムを書きます. 最高経営責任者(CEO:
ha noi
=>Ha Noi
.- ファンクションスイッチを書きます 1 小文字とする文字列 1 この関数は大文字に変換しました.
- 文字列内の文字の文字列にプログラムを書いた後、どのように多くの文字を数えます “の”.
- 文字列上でプログラムを書きます. それは、文字列をミラー化されているかどうかをチェック? 元の文字列のように後方にまだ書くときの対称性は、文字列の文字列です。. 最高経営責任者(CEO レベル
- 数字でプログラムを書きます 3 数字. 碑文は、その数の値を記述する言っ. 例 123 ->百と23.
Anh ơi trong cái “char型の脅威[50]”. 50 là số ký tự hả anh ? Em thay bằng số 2 nhưng vẫn viết nhiều hơn bình thường.
SME, đúng rồi, đó là giới hạn số lượng ký tự. Còn tại sao mà em gõ quá vẫn không bị thì mình cũng không rõ.
blog của a rất chi tiết và dễ hiểu. 電子感謝
A cho e xin bài tập c với ạ!! 🙂
minh muon ghep hai mang thanh mot mang minh đã dùng hàm strcpy() しかし、プログラムは、彼らがそうしなければならないライブラリプレスtring.hを持っていません?
あなたは、ライブラリstring.hののtring.hを使用する必要はありません
文字列内の文字を削除する方法. C言語ではなく、削除機能がありませんが、前の文字のアドレスを上書きし、以下の文字のアドレスをコピーすることによって除去することができる. 例えば、我々は、文字列のHT = "グエン·ヴァン·A」を持っている, 文字「威信」は次の操作を行う削除したい: strcpyの(&ハイチ[2],&ハイチ[4]);
ブラザー彼は子供を持つ世帯に私はコピーがどのようにオーバーライドし、それを理解していないこの場所を説明しました.
あなたはそれを使用しようとしているDJK.
Theo mình hiểu thì cái lệnh strcpy(&ハイチ[2],&ハイチ[4]); HTからアドレスをコピーします[4] HTへ[N] HTからのアドレス[2] 最後まで. このコマンドは、彼のアドレスを上書き値を保存します, したがって、HTを削除することと等価です[2] およびHT[3] 古いです. 具体的にここで、それは一部を上書きします “バンA” ファンティエットに “uyenヴァンA”. このような “ウルグアイ” トップと失われたになります.
オーバーライドする場合, 弦 “バンA” オーバーライド文字列 “uyenヴァンA” , それは、文字列のバランスの部分ではありませんでした。このストリングKO二つの等しい長さ “uyenヴァンA” ハァッ ???
我々はアドレスをコピーするために使用されているので、, それは新しいアドレスではなく、文字の置き換えを取られています.
@quan: あなたが書く、というと人に説明しよう, プログラミングは理解するが、異なるオウムのスタイルの教育はベトナムものです.
その上まであなたがそれを言うように.
ああ、この記事では、ヘルプとして知られる対F E kが存在します:
カムシーザーが帰ってきました 3 文字: A->X, B->, ℃>から,…, Z->で
入力:
文字列s解読する前に (0<sの法案が見ています
先生対C言語でコードを書く全世帯の電子. 電子感謝!
あなたは、各文字を閲覧します, その後、各文字がDJKあるリセット.
私の広告がkoえっCやや現代のカニです. 担任教師アップ両方の問題
このシリーズであああなたなしでオフライン. 私は補完しようとするでしょう.
先生のヘルプ電子…..H eは今、すべてのユーザーが、この意志を示したk個の先生を解決….
おすすめの投稿: コンピュータを印刷文字の順列, eは、方向先生を開始する必要があります…
あなたはそれこの記事を参照してください。: https://www.cachhoc.net/2013/09/03/thuat-toan-liet-ke-hoan-vi/
彼は被験者なく、彼の人工知能についての講義します
申し訳ありませんが、私はああを持っていません.
彼は言った彼の性格ではない輸出用の文字やコンテンツ検査のいくつかの例
かなりあなたがチェック@@およびエクスポート何を意味するか知っていることはありません?
小さな子供たちのためにこの文の意味は、それが先生を返すどんな先生か、どのような値である尋ねます
S[strlen関数(S)-1];
文字列sの最後の文字にアクセス.
vậy cái i– 何だった行うには??
ダウン変数iを減少させるために、 1 ユニット.
最後に彼はどのように彼使用せずにハンドラの例を作りました???
で–; // why???
Sau khi xoá dấu cách ở vị trí i, thì dấu cách ở vị trí i + 1 lại đc chuyển vào vị trí i,
Nếu ta ko i–; thì sẽ bỏ qua dấu cách này, khiến ko xoá đc hết dấu cách thừa( 例 3 dấu cách liền nhau thì chỉ xoá đc 1 dấu cách thôi).
Em giải thích thế đúng ko a 😀
[はい.
em van chua lam duoc bai nao hihu
あなたは訪問することができます https://chamcode.net オフラインで作業します, có hệ thống chấm đúng sai luôn 😉
彼は多くの異なる名前の先生の配列をインポートし、印刷する方法を私に尋ねました?
あなたは、charの宣言します[N][M] ここで、nは、人々の数は、, mは文字の最大数です 1 名前. その後、各sインポート[で] 一つ.
この例では、ときにのみ、より大きな鎖長を適用します 0 そして上部の余分な白い看板, 終了または単語の間.
私は、チェーンなどの発熱ですべてのカウントでYES SIRを尋ねました:”グエン·ヴァン·代理店” 持っている 3 単語間のKマークが白のとき、彼は彼の花嫁を獲得した方法からのみ適用されます
余分なプレイNHEありません.
cho em hỏi xâu ” hoc tap ” thì ký tự khoảng trắng trước và sau “hoc tap” 文字は、あなたがされていません取得します
NHE取ります.
その最初の文字の転送は、あなたの任意の関数を使用し、自分の名前を大文字にします ?
DIY NHE, 利用可能なコンテンツありません.
解決に向けた最愛の人 6 先生は何ですか ?
単語からすべての転送に似てこの記事. あなたは数字を分離する必要があります, 適切な読み取りを行うため、その位置の順序に基づいて.
ライブラリの電子を使用して、なぜ彼が私に尋ねました ,その後、関数のstrcpyを宣言したが、マシンはまだ間違った先生スターstrcpy_sを次に電子のstrcpy_sを入力入力する必要があります??nhieuに感謝
あなたはソフトウェアように、コードには何を使うのですか?
間違ったシーケンスのコンセプト, 文字列には、広告の子供を持つことができません!.
文字列は配列として扱われます 1 文字としてchar型の要素の寸法, 数字やなどの特殊文字 +, -, *, /, $, #,...
慣例により, シーケンスは、ヌル文字で終了します (「 0」 : 登録turong).
“nguyenvanquan7826” あなたのチェーンがありません?
上記を行うには管理者から数えるコード文字列は妥当ではありません(多くの場合、入力は「スペース」)
私が指摘している上に、私はあなたを得ました: “この例では、ときにのみ、より大きな鎖長を適用します 0 そして上部の余分な白い看板, 終了または単語の間。”
e nghĩ là i– 配列中の各桁の制御に使用される単一の分離 1 スペース
ユーザーが二つ以上のスペースを入力するかどうので、私を使用しません– それだけ減少します 1 スペースのみ例えば :グエン・ヴァン・クアングエン・ヴァン・クアン、=. 我々は、ユーザーの袋しずくにスペースを入力してください知っている場合は、彼らはI + 1、I + 2することができ、I + 3、…I + nは私たちが私を使用しそう– 以下のための問題を解決するために
数字を数字に変換するにはどうすればよいですか? ???
飼いならされた文字のアドレスを数値文字列に取得します
fflushは(標準入力); 入力文字を次の文字に停止します