串輸入輸出

串輸入輸出在程式語言中指的是字元串的輸入輸出,在不同的程式語言中需要藉助不同的庫函式。

基本介紹

  • 中文名:串輸入輸出
  • 外文名:String input and output
  • 定義:字元串的輸入輸出函式
  • 性質:一種函式
  • 套用學科:計算機
  • 套用範圍:計算機的程式語言中使用
字元串輸入,C語言字元串輸入函式,C++語言字元串輸入函式,字元串輸出,C語言字元串輸出函式,C++語言字元串輸出函式,

字元串輸入

字元串的輸入分為兩步:字元串存儲空間的分配;利用輸入函式來讀入字元串。
當讀入一個串時, 第一件要做的事情是分配一塊空間來存放串。這意味著申請足夠的存貯空間存放我們讀入的無論多長的串。最簡單的方法是在說明語句中包括明確的數組長度說明。一旦你已經為一個字元串申請了空間, 你就可以讀入這個字元串了。簡單介紹C語言和C++語言的輸入函式。

C語言字元串輸入函式

一、gets()函式
用gets()輸入字元串,沒有預定的長度,為了知道輸入何時結束,解決的辦法是讀字元串,直到遇到一個換行 (\n),按回車鍵可以結束輸入,它讀取 換行符之前(不包括換行符)的所有字元,在這些字元後添加一個空字元(\0),然後把這個字元串交給調用它的程式它將讀取換行符並將其丟棄。
缺點:不檢查預留有存儲區是否能夠容納實際輸入的數據,多出來的字元簡單地溢出到相鄰的記憶體區,fgets()改進了這個問題。
下面舉個例子來說明。
#include <stdio.h>int main(){   char str1[30], str2[30];   printf("Input str1: ");   scanf("%s", str1);   printf("Input str2: ");   scanf("%s", str2);   printf("str1: %s\nstr2: %s\n", str1, str2);   return 0;}
運行結果:
Input str1: c.biancheng.netInput str2: Java Python C-Sharpstr1: c.biancheng.netstr2: Java
二、fgets()函式
1.它需要第二個參數來說明最大讀入字元數,如果這個參數值為n, fgets()就會讀取最多n-1 個字元 或者讀完一個換行符為止,由這二者中最先滿足的那個結束輸入
2.如果fgets()讀取到換行符,就會把它存到字元串里,而不是像gets() 那樣丟棄換行符。它還需要第三個參數來說明讀哪個檔案,從鍵盤上讀數據時,可以使用stdin作為該參數 如:fgets( name , Max ,stdin);
缺點:由於fgets()把 \n 也當做輸入字元,所以輸出時,每遇到 \n 就自動換行,可以用strchr() 來定位和刪除換行符 。
下面舉出例子來說明。
#include<stdio.h>  #define MAX 81    int main(void)  {      char name[MAX];      char *ptr;      printf("Please input your name.\n");      ptr = fgets(name, MAX, stdin);      printf("name, %s\n", name);      printf("ptr, %s\n", ptr);      return 0;  }  
運行結果:
Please input your name.  clef  name, clef    //注意這裡的換行符,因為fgets()函式沒有丟棄輸入的換行符  ptr, clef  
三、 scanf()函式
1.帶有%s格式scanf()函式來讀入一個字元串 ,帶有%c可讀取一個字元,此時空格符也算一個字元所以輸入是要注意了
2.scanf()使用2種方法決定輸入結束 :遇到第一個空格,制表符,換行符如果指定了欄位寬度,比如%10s,則scanf()就會讀入10個字元,或知道遇到第一個空白字元,二者最先滿足的那個終止輸入。
3.scanf()函式返回的是一個整數值,是成功讀取的項目數或當遇到檔案結束時返回EOF。
下面舉出一個例子來說明。
#include <stdio.h>int main(){    char str1[30], str2[30];    printf("Input str1: ");    scanf("%s", str1);    printf("Input str2: ");    scanf("%s", str2);    printf("str1: %s\nstr2: %s\n", str1, str2);    return 0;}
執行結果:
Input str1: c.biancheng.netInput str2: Java Python C-Sharpstr1: c.biancheng.netstr2: Java

C++語言字元串輸入函式

一、String類——針對字元串長度未知
通過以下實例來說明。
#include<iostream>        //標準輸入輸出流頭檔案  #include<string>      //由於後面實例化String對象,因此這裡的頭檔案不能少  using namespace std;  int main()  {      string str;      char temp;      cout<<"輸入字元串,按回車鍵結束輸入"<<endl;      while((temp=cin.get())!='\n')      {          str +=temp;      }      const int LEN =str.length();    //str是String的一個對象,length是成員函式      char* dest = new char[LEN];     //根據輸入字元串的長度,創建字元數組       for(int i = 0;i<LEN;i++)     //將字元串保存到字元數組中       {          dest[i]=str[i];          cout<<dest[i];      }         cout<<endl;      delete dest;                    //此處銷毀new開闢的空間不能忘記      system("pause");      return 0;  }  
運行結果:輸入:I Love C++! 按回車後輸出:I Love C++!
二、cin.get函式
cin.get(str, len)——可以輸入長度為len的字元串,但是只顯示前len-1個字元,餘下的空間用來存儲空字元。
通過以下程式來說明使用方法。
#include <iostream>  using namespace std;  int main()  {      char str[10];      cin.get(str, 10);      cout << str << endl;      cout<<strlen(str)<<endl;  //如果輸入10字元,只會顯示9個      return 0;  }  
三、cin.getline()函式
getline(char *line,int size,char='結束標識符') 第一個就是字元指針,第二個是字元長度,第三個1行的結束標識符,當該參數省略時,系統默認為'\0' 。
通過以下程式來說明。
#include <iostream>   using namespace std;   void main ()   {       char m[20];       cin.getline(m,5);       cout<<m<<endl;   }  
運行結果:輸入:abcde 輸出:abcd 。字元串長度為4最後一個字元為'\0'。
如果要輸入多行字元串,而且其中包括空格、制表符或換行時,只需要將結束標示符設定為字元串中不會出現的字元即可。
通過以下程式來說明。
#include <iostream>  using namespace std;  void main()  {        char cstr[200];        char bstr[200];        cin.getline(cstr,sizeof(bstr),'[');     //我們以單個英文字母'X'作為終止標識符        cin.getline(bstr,sizeof(cstr),']');         cout<<"第一行是:"<<cstr<<endl;                  cout<<"第二行是:"<<bstr<<endl;                  system("pause");   }  
運行結果:輸入:abcd 輸出:abcd。

字元串輸出

字元串的輸出, 正如字元串輸入, 必須依賴於庫函式。簡單介紹C語言和C++語言的輸出函式。

C語言字元串輸出函式

一、puts()函式
puts()顯示字元串是自動在其後添加一個換行符,puts()遇到空字元時,輸出停止,所以確保有空字元存在否則直到發現一個空字元為止 。
下面舉個例子來說明。
#include<stdio.h>  #define DEF "I am a #defined string."  int main(void)  {      char str1[80] = "An array was initialized to me.";      const char * str2 = "A pointer was initialized to me.";      puts("I'm an argument to puts()."); //直接用字元串做參數      puts(DEF); //用宏定義做參數      puts(str1);      puts(str2);      puts(&(str1[5])); //必須用括弧strl1[5],因為str1將會首先結合&,然後在[5]結合,將出錯      puts(str2+4);      return 0;  }  
執行結果:
I'm an argument to puts().  I am a #defined string.  An array was initialized to me.  A pointer was initialized to me.  ray was initialized to me.  inter was initialized to me. 
二、fputs()函式
fputs()函式需要第二個參數來說明需要寫的檔案,可以使用stdout作為參數來進行輸出 stdout在stdio.h中定義了 ,與puts不同,fputs()並不為輸出自動添加換行符 。
下面舉個例子來說明。
char line[81];  while(fgets(line,81,stdin))      fputs(line,stdout);  
三、printf()函式
printf()通過格式控制符 %s 輸出字元串。除了字元串,printf() 還能輸出其他類型的數據。
下面舉個例子來說明。
#include <stdio.h>int main(){   int i;   char str[] = "http://c.biancheng.net";   printf("%s\n", str);  //通過變數輸出   printf("%s\n", "http://c.biancheng.net");  //直接輸出   return 0;}
執行結果:
http://c.biancheng.nethttp://c.biancheng.net

C++語言字元串輸出函式

一、puts()函式
puts()函式用來向標準輸出設備(螢幕)寫字元串並換行, 其調用格式為: puts(s); 其中s為字元串變數(字元串數組名或字元串指針)。
其中, puts()函式只能輸出字元串, 不能輸出數值或進行格式變換,並且可以將字元串直接寫入puts()函式中。
下面舉個例子來說明。
#include <iostream>using namespace std;int main(){     /*定義字元串數組和指針變數*/  char s[20], *f;     /*字元串數組變數賦值*/  strcpy(s, "Hello! C++");    /*字元串指針變數賦值*/  f="Thank you";    puts(s);   puts(f); } 
執行結果:Hello! C++
Thank you
二、putch()函式
在當前游標處向文本螢幕輸出字元ch,然後游標自動右移一個字元位置。使用用法為 int putch(char ch),其中參數ch為要輸出的字元。返回值為如果輸出成功,函式返回該字元;否則返回EOF。
下面舉個例子來說明。
#include <cstdio>#include <conio.h>int main(void){  char ch = 0;  printf("Input a string:");  while ((ch != '\r')) {    ch = getch();    putch(ch);   }  return 0;}
執行結果:輸入:abcdefg 輸出:abcdefg。

相關詞條

熱門詞條

聯絡我們