1. 程式人生 > >C/C++程式設計題開頭字串、資料輸入幾種寫法

C/C++程式設計題開頭字串、資料輸入幾種寫法

1、題設

在IT公司程式設計題中,多數會讓你一併寫上測試資料輸入和結果輸出的Demo,這也是程式設計師基本的功底。想一想如果連自己的測試資料都無法給入,後面的演算法寫的再好,也無法測試它的準確性和效果。下面分別從c、c++,以及字串輸入和陣列輸入,來談談幾種常見寫法。

2、程式分析

2.1 正常字串輸入

2.1.1 C語言做法

一個不包括空格的字串寫法很簡單,不再贅述,下面直接上程式:
         char nzArr[100];
         scanf("%s",nzArr);	
      或者動態分配地址,不用字串陣列,但記得在最後釋放空間: (記得新增標頭檔案,malloc函式介面是宣告在stdlib.h標頭檔案中)
         char *nzArr1 = (char*)malloc(100*sizeof(char));  //分配100個儲存char型別資料空間
         scanf("%s",nzArr1);
                  ... ... 

           free(nzArr1);

這兩種都行,如果題目沒讓先輸入具體字串長度,可以使用第一種字串陣列,簡單,申請空間視情況而定。但是如果題設讓先輸入字串長度,然後下一行輸入一行字串,第二組更省記憶體和好理解,即:

	int nLen;
	scanf("%d",&nLen);
	char *nzArr1 = (char*)malloc(nLen*sizeof(char));
	scanf("%s",nzArr);	
注:使用VS除錯的朋友一定需要注意,標準scanf和printf函式介面是宣告在stdio.h中,但是在VS可能因為內嵌其它標準庫中原因,你未新增stdio.h標頭檔案也能執行,但是gcc編譯環境不新增會直接報錯。所以自己無論什麼時候除錯,最好加上stdio.h標頭檔案。

      2.1.2 C++做法

C++其實更多的輸入和輸出是從流的角度去考慮,也不再細說,直接看程式:

       char nzArr[100];
       int nLen;
       cin>>nLen;
       char *nzArr1 = (char*)malloc(nLen*sizeof(char));
       cin>>nzArr;
       cin>>nzArr1;
        但是需要記住標頭檔案#include<iostream>,#include<cstdlib>,以及名稱空間using namespace std。這樣cin和cout才能被編譯器找到和識別。         這塊細心的朋友可能發現,我前後寫malloc所宣告的標頭檔案不一樣。c中是stdlib.h,而c++中是cstdlib。這主要是c++像c相容,為了以示區別,c++庫標頭檔案都將.h的標頭檔案名修改成了c開標頭檔案名。這樣的還有如math.h和cmath。實質是一樣的,因為相容性,在c++中,你新增stdlib.h也能找到對應函式的宣告。所以c和c++慢慢的已經融合到一起使用。

2.2 輸入一段字串語句

這裡我不再區分c和c++的寫法,上面已說明。這裡直接進入正題,有些程式設計題讓你輸入一段字串語句儲存在字串陣列中,而且並沒告訴你包含多少字元,以及還包含空格。所以這裡就不能簡單的像上面那樣去處理了。因為儲存一個字串會在空格處斷開,後面直接捨棄。如果用流的方式讀入,這就設計申請二位字串陣列,很麻煩。
      這裡我們需要呼叫流讀入一整行的方式,具體程式如下:

       char nzArr[100];
       cin.getline(nzArr,100);//當換行後獲得流中100個字元,如果沒有提前加上字串結束符'\n'。
         如果想知道自己輸入了多少個字元(包括空格),可以呼叫計算字串長度的函式:
       #include<cstring>
       //或者#include<string.h>,但是不可以<string>,這是另外一個頭檔案,以後再詳細描述
       int nLen = strlen(nzArr);
          strlen計算字串長度是到結束符'\n'為止,所以與你開始儲存的字串申請空間大小無關。上面也是一樣,也可以呼叫該函式計算字串長度。

      2.3 數字資料輸入

        數字資料獲得就簡單一些,一次一次從流中讀入即可。也是一樣,這裡我不在分c和c++講解,與上文一樣。一般輸入數字資料,會讓你先輸入資料個數,然後另起一行,隔個空格輸入一個數據。具體程式實現如下:

      int nLen;
      cin>>nLen;
      int nArr[100];
      //或者動態申請地址也是一樣。
      for(int i=0; i<nLen;i++)
      {
         cin>>nArr[i];
         //或者scanf("%d",&nArr[i]);
       }
          你只需要每隔一個空格輸入一個數據即可,當你輸入完成換行,for語句會依次從流中讀入你輸入的每個資料。哪怕你輸入超過nLen,它也只讀取前nLen個。

    轉載請註明出處:CSDN 無鞋童鞋。