C/C++程式設計題開頭字串、資料輸入幾種寫法
阿新 • • 發佈:2019-02-11
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);
這兩種都行,如果題目沒讓先輸入具體字串長度,可以使用第一種字串陣列,簡單,申請空間視情況而定。但是如果題設讓先輸入字串長度,然後下一行輸入一行字串,第二組更省記憶體和好理解,即:
注:使用VS除錯的朋友一定需要注意,標準scanf和printf函式介面是宣告在stdio.h中,但是在VS可能因為內嵌其它標準庫中原因,你未新增stdio.h標頭檔案也能執行,但是gcc編譯環境不新增會直接報錯。所以自己無論什麼時候除錯,最好加上stdio.h標頭檔案。int nLen; scanf("%d",&nLen); char *nzArr1 = (char*)malloc(nLen*sizeof(char)); scanf("%s",nzArr);
2.1.2 C++做法
C++其實更多的輸入和輸出是從流的角度去考慮,也不再細說,直接看程式:
但是需要記住標頭檔案#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++慢慢的已經融合到一起使用。char nzArr[100]; int nLen; cin>>nLen; char *nzArr1 = (char*)malloc(nLen*sizeof(char)); cin>>nzArr; cin>>nzArr1;
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 無鞋童鞋。