機試12天遇到的一些問題

2021-10-21 02:42:38 字數 1925 閱讀 2415

做題過程:

1.最開始,先要能將字串寫進去,所以就找到了兩種能讀入\n的辦法

法一:

char a[16]

;for

(int i=

0;i<

15;i++)a[

15]='\0'

;//但是這種方法有乙個缺點:就是當字母個數不確定時無法輸入

法一改進版:

char a[16]

;int i=0;

while(1

)//法一的改進版比法二好很多

法二:

char a[40]

,b[40];

scanf

("%[^$]"

,a);

//這裡scanf(%[^$])的用法就是:字串讀到$時就終止讀取

用法二試一下:

2.寫escape(a,b)函式

首先想到的是這樣:

void

escape

(char

*p1,

char

*p2)

else

if(p1[i]

=='\n'

)else

} p2[j]

='\0'

;//一定注意末尾要有\0

}int

main()

通過這次除錯弄清楚了一點:

當情況是這樣時:scanf("%[\n]",a):

注意: '\n』確實也還在緩衝區,不過後續都是直接從緩衝區讀取字串而不是讀取字元,所以會直接跳過(tab, 空格, 『\n』)這類空白字元。

所以就有了這樣的改進:

scanf("%[\n]%*c",a)就是為了將』\n』字元吸收掉。

我做了乙個小小的測試,發現結果確實是這樣:

int

main()

輸入為:

1$

輸出結果為:

1

$

驗證了$的確在緩衝區中

這個題目拆分為3步:

1)要輸出乙個字串,以$結尾且能被識別出來

2)統計每個大寫字母出現的次數

3)按照字元出現的次數進行排序,

4)次數相同的字母按照字母表順序輸出(說明這種排序應該是穩定排序)

問題1解決辦法同上個題目:

char a[16]

;int i=0;

while(1

)

問題3的解決辦法:用乙個b[26]的陣列來記錄每個字元出現的次數

問題3,4的解決辦法:選擇一種穩定的排序演算法:氣泡排序首選

源**:

#include

using namespace std;

char a[

100]

;int

main()

i++;}

int b[26]

=;for(i=

0;a[i]

!='$'

;i++

)int max=0;

for(

int j=

0;j<

26;j++)if

(b[max]==0

)break

;printf

("%c:%3d\n"

,'a'

+max,b[max]);

b[max]=0

;}return0;

}

遇到的一些問題心得

一.專案的版本管理。1 gnu 風格的版本號命名格式 主版本號 子版本號 修正版本號 編譯版本號 major version number.minor version number revision number build number 示例 1.2.1,2.0,5.0.0 build 13124...

ubantu遇到的一些問題

給hackywit可以通過sudo提公升root許可權 hackywit cxb hostname cxbhackywit cxb sudo vim etc hosts sudo hackywit 的密碼 127.0.0.1 localhost cxbhackywit cxb sudo apt ge...

opengl 遇到的一些問題

在使用glteximage2d 函式時,發現可以載入512 512大小的,但是卻不能載入2018 1794的。加上畫素儲存的格式就行了 glpixelstorei gl unpack alignment,1 glteximage2d gl texture 2d,0,gl rgb,width,heig...