PTA刷題C語言編程順序顛倒輸出實現(xiàn)
這道題,是我遇見對數(shù)組元素的掌握與使用較為靈活的題目。
下面代碼是我剛接觸C++,剛學(xué)完類的一系列知識,連入門都沒過,對C++的強(qiáng)大還未有多大認(rèn)知,還是極具C語言的風(fēng)格。
我看過一篇用C++完成的比這個簡單多了。
C語言也可以用棧來完成,雖然我有棧的實現(xiàn)函數(shù),但我不愿去搞,就這樣吧,實現(xiàn)也是對自己知識點(diǎn)掌握的加深認(rèn)知。
#include <iostream> #include <cstring> int main(void) { int a = 0; char ch; char arr1[500001];//輸入數(shù)組 char arr2[500001];//輸出數(shù)組 while ((ch = getchar()) != '\n')//讀入字符串 { arr1[a++] = ch; } arr1[a] = '\0'; int len = strlen(arr1); int i = 0; int dest = len - 1;//從字符串尾部開始遍歷 while (dest >= 0) { if (arr1[dest] == ' ' && arr1[dest + 1] != ' ' && arr1[dest + 1] != '\0' || (dest == 0 && arr1[0] != ' '))//元素為單詞的條件 { if (i != 0) arr2[i++] = ' '; int last = dest + 1; if (dest == 0 && arr1[0] != ' ')//滿足條件,改變last的值 { last = dest; } while (arr1[last] != ' ' && arr1[last] != '\0')//將單詞拷貝到輸出數(shù)組中 { arr2[i++] = arr1[last++]; } } dest--; } arr2[i] = '\0';//字符串結(jié)束 std::cout << arr2 << std::endl; return 0; }
盡量理解吧
arr1[dest] == ' ' && arr1[dest + 1] != ' '&&arr1[dest+1]!='\0'
是為了確定每個單詞出現(xiàn)的條件。
(dest == 0 && arr1[0] != ' ')
是為了處理第一個元素就是單詞的情況。
while (arr1[last] != ' ' && arr1[last] != '\0') { arr2[i++] = arr1[last++]; }
負(fù)責(zé)將單詞拷貝到輸出數(shù)組上,同時符號要求。
if(i!=0) arr2[i++] = ' ';
這個是,當(dāng)?shù)谝粋€單詞拷貝過去后,判斷是否后面還有有單詞,且能進(jìn)這個域,就代表后面還有單詞,要加一個空格的元素。
以上就是PTA刷題C語言編程順序顛倒輸出實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于PTA刷題C語言倒序的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實現(xiàn)LeetCode(162.求數(shù)組的局部峰值)
這篇文章主要介紹了C++實現(xiàn)LeetCode(162.求數(shù)組的局部峰值),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語言選擇、循環(huán)、函數(shù)、數(shù)組與操作符
這篇文章主要介紹了C語言選擇、循環(huán)、函數(shù)、數(shù)組與操作符,文章基于C語言展開對主題的詳細(xì)介紹,下文內(nèi)容需要的小伙伴可以參考一下2022-04-04