noi25 最長最短單詞(為什麼會出現執行時錯誤)

2021-09-07 19:13:59 字數 3304 閱讀 2987

runtime  error (執行時錯誤)就是程式執行到一半,程式就崩潰了。
①除以零

②陣列越界:int a[3]; a[10000000]=10;

③指標越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;

④使用已經釋放的空間:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;

⑤陣列開得太大,超出了棧的範圍,造成棧溢位:int a[100000000];一般來說,在

把**按樣例執行自己推演一遍,就知道錯在哪了 ,比如這裡的執行錯誤,

拿特殊案例推演(這裡用的空字串案例就發現最後**有問題),容易發現錯誤,就是推演

總時間限制: 

1000ms

記憶體限制: 

65536kb

描述輸入1行句子(不多於200個單詞,每個單詞長度不超過100),只包含字母、空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。

試輸出第1個最長的單詞和第1個最短單詞。 

輸入一行句子。

輸出兩行輸出:

第1行,第乙個最長的單詞。

第2行,第乙個最短的單詞。

樣例輸入

i am studying programming language c in peking university

樣例輸出

programming

i

提示如果所有單詞長度相同,那麼第乙個單詞既是最長單詞也是最短單詞。

**習題(12-2)

**一:

1 #include2 #include3

char a[25000];//

陣列要足夠大

4using

namespace

std;

5int

main()617

else

if(b > 0) //

為單詞結束符號

1824

if(b 2529 b = 0;//

單詞長度清0,開始計算下乙個單詞30}

3132

}

33//

輸出最長單詞和最短單詞

34for(int i = c; i <= c + maxn - 1; ++i)

35 cout <36 cout <37for(int i = d; i <= d + minn - 1; ++i)

38 cout <39return

0;

40 }

**一種不加第十句,會出現執行時錯誤。

10     a[l] = ' ';//不加這一句會出現runtime error

再不加第十句,並且第11句換成小於l,也報執行時錯誤,原因可能是 字串沒有被訪問完全而再次訪問,也就是說字串沒有訪問到'\0'。

11     for(int i = 0; i <= l; ++i)

**二:

1 #include2 #include3

char a[25000];//

陣列要足夠大

4using

namespace

std;

5int

main()620

if(b 2125 b = 0;//

單詞長度清0,開始計算下乙個單詞26}

2728}29

if(a[i] != '

' && a[i] != ','

)3033else

if(b > 0) //

為單詞結束符號

3440

if(b 4145 b = 0;//

單詞長度清0,開始計算下乙個單詞46}

4748

}

49//

輸出最長單詞和最短單詞

50for(int i = c; i <= c + maxn - 1; ++i)

51 cout <52 cout <53for(int i = d; i <= d + minn - 1; ++i)

54 cout <55return

0;

56 }

runtime error可能的原因

runtime  error (執行時錯誤)就是程式執行到一半,程式就崩潰了。
比如說:

①除以零

②陣列越界:int a[3]; a[10000000]=10;

③指標越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;

④使用已經釋放的空間:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;

⑤陣列開得太大,超出了棧的範圍,造成棧溢位:int a[100000000];一般來說,在

oj上做題都把陣列設成全域性變數,減少5出現的可能。

有的時候再出現這樣的錯誤還會給提示

runtime error(array_bounds_exceeded) // array bounds exceed 陣列越界

runtime error(divide_by_zero) //divisor is nil 除零

runtime error(access_violation) //illegal memory access 非法記憶體讀取

runtime error(stack_overflow) //stack overflow 系統棧過載

這樣可以照著上面查詢錯誤。

出現runtime error的原因是  陣列越界訪問,原因是因為沒有非下面的c賦初值,

8     int minn = 110, maxn = 0, c, d, e, q = 0, b = 0;
多組資料下,一定會造成陣列的越界訪問的

50     for(int i = c; i <= c + maxn - 1; ++i)

51 cout << a[i];

52 cout << endl;

25 最長最短單詞

總時間限制 1000ms 記憶體限制 65536kb 描述輸入1行句子 不多於200個單詞,每個單詞長度不超過100 只包含字母 空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。試輸出第1個最長的單詞和第1個最短單詞。輸入一行句子。輸出兩行輸出 第1行,第乙個最長的單詞。第2行...

25 最長最短單詞

總時間限制 1000ms 記憶體限制 65536kb 描述輸入1行句子 不多於200個單詞,每個單詞長度不超過100 只包含字母 空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。試輸出第1個最長的單詞和第1個最短單詞。輸入一行句子。輸出兩行輸出 第1行,第乙個最長的單詞。第2行...

最長最短單詞

描述 輸入1行句子 不多於200個單詞,每個單詞長度不超過100 只包含字母 空格和逗號。單詞由至少乙個連續的字母構成,空格和逗號都是單詞間的間隔。試輸出第1個最長的單詞和第1個最短單詞。輸入一行句子。輸出兩行輸出 第1行,第乙個最長的單詞。第2行,第乙個最短的單詞。樣例輸入 i am studyi...