您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言倒置字符串問題怎么解決”,在日常操作中,相信很多人在C語言倒置字符串問題怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言倒置字符串問題怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
首先我們定義一個字符數組來存放字符串,然后用 gets函數來讀入字符串,接下來進行處理階段,設計一個逆序函數逆序整個字符串,然后再逆序每個單詞,最后處理一下細節再輸出
定義完一個字符數組后,因為scanf不吃空格符和換行符,所以這里輸入我們采用gets函數來進行讀入字符串,看代碼????
int main() { char arr[101] = { 0 }; //輸入 gets(arr);
看代碼
void reverse(char* left, char* right) { assert(*left != NULL); assert(*right != NULL); while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } }
??字符串的首尾元素逐個進行交換(不包括\0)??
因為傳過來的是數組首元素地址,所以我們要用指針變量來接收,為了代碼更謹慎,這里使用了assert斷言,防止遇到空指針而導致程序運行錯誤(不能忘記引頭文件<assert.h>)
int len = strlen(arr); //逆序整個字符串 reverse(arr, arr + len - 1);
我們使用strlen函數來計算字符串元素個數(不要忘記引頭文件<string.h>),然后調用 reverse函數進行整個字符串的逆置。
這里的 arr + len - 1是首元素地址+字符串長度(整數)- 1 得到的是末尾元素的地址(如果不 - 1指向的就是 ’\0‘了)
char* cur = arr; while (*cur) { //找一個單詞 char* start = cur; while (*cur != ' ' && *cur != '\0') { cur++; } reverse(start, cur - 1); if (*cur == ' ') { cur++; } }
定義一個指針變量cur來接收逆序整個字符串之后的arr數組首元素地址,然后如果cur指向的字符不是’\0’的話就進入循環,然后再定義一個指針變量start來接收每個單詞的首元素地址,然后進入循環判斷如果cur指向的不是空格或者’\0’就往后跳一個字符,直到cur指向的是空格或者’\0‘了,就說明已經遍歷完確認了一個單詞,然后進入reverse函數 來逆序單詞(cur - 1 是因為如果不 -1,cur指向的是空格或者’\0‘)
最后如果cur指向的是空格而不是’\0‘就說明還沒有結束,還有單詞沒有逆序完,往后跳一個字符循環繼續
#include<stdio.h> #include<string.h> #include<assert.h> void reverse(char* left, char* right) { assert(*left != NULL); assert(*right != NULL); while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char arr[101] = { 0 }; //輸入 gets(arr); //處理 int len = strlen(arr); //逆序整個字符串 reverse(arr, arr + len - 1); //逆序每個單詞 char* cur = arr; while (*cur) { //找一個單詞 char* start = cur; while (*cur != ' ' && *cur != '\0') { cur++; } reverse(start, cur - 1); if (*cur == ' ') { cur++; } } //打印 printf("%s\n", arr); return 0; }
到此,關于“C語言倒置字符串問題怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。