C言語の文字列入出力

4027 ワード

文字列の出力はC言語で、出力文字列の関数は2つあります.put():直接文字列を出力し、文字列しか出力できません.printf():文字列をフォーマット制御子%sで出力します.文字列以外にも、printf()は他のタイプのデータを出力することができます.この二つの関数は前に述べましたが、ここでもう一回デモンストレーションしてもいいです.下記のコードを見てください.    int i;    char str[]="http://c.biancheng.net";    printf("%s",str); //変数による出力    printf(“%s”,“http://c.biancheng.net"); //直接出力    puts(str) //変数による出力    puts("http://c.biancheng.net"); //直接出力    return 0;}運転結果:http://c.biancheng.net http://c.biancheng.net http://c.biancheng.net http://c.biancheng.net printf()関数で%sを使って文字列を出力する場合、変数リストに配列名を指定すればよく、printf("%s",str[])とは書くことができません.文字列の入力はC言語で、入力文字列の関数は2つあります.文字列以外にも、scanf()は他のタイプのデータを入力することができます.gets():文字列を直接入力し、文字列のみ入力できます.1)scanf()を使って文字列を読み取りますので、まず以下の例を見てください.    char str 1[30]、str 2[30]    printf(Input str 1:)    scanf("%s",str 1);    printf(「Input str 2:」)    scanf("%s",str 2);    printf(「str 1:%sstr 2:%s」、str 1、str 2)    return 0;]運転結果:Input str 1:c.biancheng.net↙ Input str 2:Java Python C-Sharp↙ str 1:c.biancheng.net str 2:Javaは文字配列の長さが30なので、入力した文字列の長さは30以下でなければならない.プログラムについての説明:①私たちはもともと「Java Python C-Sharp」をstr 2に割り当てたいのですが、scanf()は「Java」にしか読み取れません.これはscanf()がスペースを読み取った時に文字列入力が終了したと見なされ、読み続けられなくなりました.以下の例を見てください.荪include<stdio.h>int main(){    char str 1[20],str 2[20],str 3[20]    printf(「Input string:」)    scanf("%s",str 1);    scanf("%s",str 2);    scanf("%s",str 3);    printf(「str 1:%sstr 2:%sstr 3:%s」、str 1、str 2、str 3)    運転結果:Input string:Java Python C-Sharp↙ str 1:Javastr 2:Python str 3:C-Sharpの最初のscanf()は「Java」を読んでからスペースに遭遇し、読み取りを終了し、「Python C-Sharp」をバッファエリアに残します.二つ目のscanf()は直接バッファから読み取って、ユーザーの入力を待つことなく、「Python」を読んだらスペースに遭遇し、読み取りを終了し、「C-Sharp」をバッファに残します.三つ目のscanf()はバッファに残っている内容を読みだします.②「キーボードからデータを入力する」では、scanfの各変数の前にアドレス記号&を追加して変数のアドレスを取得します.例えば、int a、b;scanf('%d%d'、&a、&b);しかし、このセクションの例では、文字列を読み込んでも文字配列が使用されていませんでした.例えば、char str 1[20]、str 2[20]、str 3[20]、str 4[20]などです.scanf('%s%s%s%s')、str 1、str 2、str 3、str 4)これはC言語の規定により、配列名はその配列の住所を表しているからです.配列全体は、文字配列char c[10]などの一連のメモリユニットであり、メモリでは、C言語で表されることができ、配列名に代表されるアドレスは、例えば、char c[10];cはc[0]の住所を表します.0番目の要素のアドレスは配列の開始アドレスで、先頭アドレスと呼ばれます.つまり、配列名は配列の最初のアドレスを表します.配列cの最初のアドレスを0 X 2000、つまりc[0]アドレスを0 X 2000とすると、配列名cはこのアドレスを表します.cはすでに住所を表しているので、cの前にアドレスを追加することはできません.例えばscanf('%s'、&c);間違いです首の住所があって、文字列の終わりの文字列'\0'があって、メモリの中で完全に1つの文字列を位置決めすることができました.例えば、printf("%s",c);printf関数は、配列名に従ってcの最初のアドレスを見つけ、配列中の各文字を'0'に出会うまで出力します.int、float、charタイプの変数表示データ自体は変数に保存されます.配列名は配列の最初のアドレスであり、配列は他のメモリユニットに保存されています.配列名はこのメモリの最初のアドレスです.後は指針を説明しますので、もっと深く理解してください.2)gets()を使って文字列get stringの略語を読み取るという意味で、ユーザーがキーボードから入力した文字列を取得するという意味で、構文形式は:gets(arrayName)となります.arrayNameは文字配列です.キーボードから得られた文字列は、arrayNameに保存されます.下の例を見てください.テキストの新しいウィンドウをコピーします.    char str 1[30]、str 2[30]    printf(Input str 1:)    gets(str 1)    printf(「Input str 2:」)    gets(str 2);    printf(「str 1:%sstr 2:%s」、str 1、str 2)    運転結果:Input str 1:Java Python C-Sharp↙ Input str 2:http://c.biancheng.net↙ str 1:Java Python C-Sharp str 2:http://c.biancheng.net 入力した文字列にスペースが含まれている場合、出力はすべての文字列であることが分かります.これは、gets()関数がスペースを入力終了のフラグとしては使わず、折り返しだけを入力終了のフラグとしています.これはscanf()関数とは異なります.まとめ:読みたい文字列にスペースが含まれていない場合は、scanf()関数を使用します.行全体の文字列を取得するには、gets()関数を使用して、スペースの切断を避けることができます.
タイトル:文字列を入力し、数字文字を含み、数字を取り出して並べ替えます.
例題:
#include <stdio.h>
void main()
{
 char c[20],i,c1[20],j,t;
 for(i=0;i<20;i++)
  c1[i]=c[i]='\0';//        ,               
 printf("      :
"); scanf("%c",c); for(i=0;c[i]!='
'&&i<20;)// , , { i++; c[i]=getchar(); } for(i=0,j=0;i<20;i++)// { if(c[i]=='\0') break; if(c[i]>='0'&&c[i]<='9') c1[j++]=c[i]; } for(i=0;i<20;i++)// { if(c1[i]=='\0') break; j=0; for(;j<i;j++) { if(c1[i]>c1[j]) { t=c1[i]; c1[i]=c1[j]; c1[j]=t; } } } printf("%s
",c1);//