北航計算機機試14排版

2021-07-28 14:45:46 字數 2101 閱讀 6565

輸入若干行字元,表示某電影的演職員表,每行只有乙個冒號,冒號前面是職位,冒號後面是姓名,要求把各行冒號對齊,刪除多餘空格後輸出。

先輸入乙個字,表示排版要求的冒號位置該位置號保證比各行冒號前的最大字元數還要大。再輸入若干行字元,最多50行,每行最多100個字元,除空格、製表符和回車之外都是有效字元,要求每行的冒號處於格式要求的位置,冒號兩邊與有效單詞之間各有乙個空格,冒號前面的單詞之間只有乙個空格(刪除多餘的空格和製表符),在冒號左邊右對齊,前面全由空格填充,冒號後面的單詞之間也只有乙個空格,在冒號右邊左對齊,最後乙個單詞後不加空格直接換行。

#include

#include

#include

#define m 50

#define n 100

int main()

//除去空白行進行迴圈遍歷

for(int i=0;i1;i++)

j++;

}//向系統申請兩個一維陣列的記憶體,這裡注意不要越界,不要越界!!!!!!!

char *job=null;

job=(char*) malloc((mao+1)*sizeof(char));

char *name=null;

name=(char*) malloc((len-mao)*sizeof(char));

//在把職位賦值的時候需要在賦值完成之後加上'\0'符號,否則會出現連續的空白符

for(j=0;js[i][j];

}job[j]='\0';

//將姓名賦值給name陣列,因為末尾有換行符,可直接到=len

int k;

for(k=0,j=mao+1;j<=len;j++,k++)

//按照題目格式,在規定位置為冒號,然後前面的職位右對齊,域寬為冒號位置減一,空白格填充,姓名則左對齊,直接換行

printf("%*s : %-s\n",po,job,name);

//記得釋放掉你申請的記憶體

free(job);

free(name);

}return0;}

/*error:

1.damage:after normal block(#****) 在賦值'\0'時忘記申請的記憶體只有4個,訪問越界了

錯誤源頭一,陣列訪問越界:

int* a = new int[5];

a[5] = 3; // 這兒訪問越界了

delete a;

在delete a;這句**處將會出現:damage:after normal block(#93)的錯誤。

錯誤源頭二:

char* pbuffer = new char[2];

int v = 12345;

memcpy(pbuffer, &v, sizeof(v));

delete pbuffer;

正如**所表示的,我的緩衝區pbuffer有且僅分配了2bytes的空間,然面我卻向它塞了4bytes的值,顯然這是不正確的,debug一下,將出現:damage:after normal block(#94)的錯誤。

2.debug error!invalid allocation size:4294967295 bytes 同樣是越界問題,因為scanf輸入後換行符存入緩衝區,導致後續程式出現非法值

也可能是new的問題,在char *p=new char[n];n為之前計算的變數,當n為-1時,會出現錯誤

3.gets()

當需要迴圈輸入字串進行處理,同時不知道輸入字串何時終止,所以要判斷輸入的是否時空行。一開始我想用scanf("%s", str);輸入字串,但是發現當不輸入字元直接回車時,scanf()根本不接受,還會一直要你進行輸入。後來使用了gets()方法才解決掉這個問題。

可以用以下的方法:

方法一:

當gets()函式沒有接受到輸入時,它會給字串乙個『\0』在最前方,

#include

int main()

return0;}

方法二:

#include

#include

int main()

return0;}

*/

北航計算機機試2012

vc fushic18 1.分解整數 某些整數能分解成若干個連續整數的和的形式,例如 15 1 2 3 4 5 15 4 5 6 15 7 8 某些整數不能分解為連續整數的和,例如 16 輸入 乙個整數n n 10000 輸出 整數n對應的所有分解組合,按照每個分解中的最小整數從小到大輸出,每個分解...

北航計算機機試2011

程式保留在fushic2011.cpp中 1.孿生數 問題描述 孿生數定義 如果 a 的約數 因數,包含1,但不包含a本身 之和等於 b b 的約數 因數 之和等於 a a 和 b 稱為孿生數 a和b不相等 試找出正整數 m 和 n 之間的孿生數。輸入 從控制台輸入兩個正整數m和n 1 m輸出 在標...

北航計算機機試2010

1.泰勒求cos x 利用泰勒公式求cos x 1 x2 2 x4 4 重要的就是注意細節 比如階乘的儲存最好用double型別 include includedouble fun int i return mul double cos int x while fabs temp 1e 6 retu...