1. 程式人生 > 其它 >程式設計題:7-11 字串逆序

程式設計題:7-11 字串逆序

技術標籤:# 浙大版《C語言程式設計(第3版)》題目集c語言程式語言

題目要求:

輸入一個字串,對該字串進行逆序,輸出逆序後的字串。

題目格式:

輸入在一行中給出一個不超過80個字元長度的、以回車結束的非空字串。

輸出格式:

在一行中輸出逆序後的字串。

輸入樣例:

hello world!

輸出樣例:

!dlroW olleH

程式碼實現:

void reverseList(char* pa,int i)
{
	int left = 0;
	int right = i - 1;
	while (left < right)
	{
		char tmp = pa[left];
		pa[
left] = pa[right]; pa[right] = tmp; left++; right--; } } int main() { char arr[80] = {0}; int i = 0; while ((arr[i] = getchar()) != '\n') { i++; } arr[i] = '\0'; reverseList(arr,i); printf("%s\n", arr); return 0; }

執行效果:

在這裡插入圖片描述

總結:

1、 此道題目不能用scanf進行從鍵盤鍵入一個字串,因為對於scanf,遇見空格或者回車鍵即停止,舉個例子:當我們運用scanf從鍵盤輸入“hello world!”時,打印出來是“hello”。於是我們考慮運用getchar()去讀取從鍵盤輸入的字串,字串裡可以包括空格等。就是利用一個迴圈,用getchar()去一個一個讀取放到陣列arr中,直到arr[i]讀取到‘\n’,結束迴圈。記住最關鍵的一步,就是結束後的時候,將此時的arr[i]賦值為’\0’。

2、 如果你在main()函式中對定義的陣列arr不規定大小的話,即char arr[] = { 0 }; ,此項程式碼執行時會出現棧越界的問題,也就是超過了arr陣列規定的界限。