這篇文章主要介紹“C語言怎么實現(xiàn)字符串的旋轉(zhuǎn)”,在日常操作中,相信很多人在C語言怎么實現(xiàn)字符串的旋轉(zhuǎn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言怎么實現(xiàn)字符串的旋轉(zhuǎn)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)專注于蒼梧網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供蒼梧營銷型網(wǎng)站建設(shè),蒼梧網(wǎng)站制作、蒼梧網(wǎng)頁設(shè)計、蒼梧網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造蒼梧網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供蒼梧網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。這種題目有兩種思路:
1.首字符的后置以及其余元素的往前推置,循環(huán)重復(fù)此過程K次(k為左旋字符個數(shù))。
eg:
字符串為“ABCDEF\0”,要旋轉(zhuǎn)2個字符,
首先保存首字符到一個變量,然后把其余變量全部提前一位置放,即為“BCDEF \0”(此處注意,最后的終止符\0不要提前,留出一個空位)
再把用來保存的變量給字符串最后一個位置(除\0外),即為“BCDEFA\0”
再做一次此過程即為“CDEFGA \0”——》“CDEFGAB\0”
源代碼:
#include#include #include void Exchange(char *str, int k) { int i,m; char temp; char *sta; for (i = 0; i < k; i++) { sta = str; temp = *str;//保存首字符 for (m = 0; m <= (int)strlen(str)-1; m++)//元素提前放置 { *sta = *(sta + 1); sta++; } *(str+strlen(str)) = temp;//將首字符放置最后 } } int main() { int leng; printf("請輸入要左旋幾個字符\n"); scanf("%d", &leng); char str[] = "ABCDEFG"; Exchange(str,leng); printf("%s\n", str); system("pause"); return 0; }
2.三步旋轉(zhuǎn)法
這種方法是由觀察得來,旋轉(zhuǎn)后的字符串有此規(guī)律:
旋轉(zhuǎn)前“ABCDEFG”
旋轉(zhuǎn)后“CDEFGAB”
將旋轉(zhuǎn)后的字符逆置得
“CDEFGBA”
將未旋轉(zhuǎn)的字符逆置得
“GFEDCBA”
再將全部字符逆置就得到了原來的字符串“ABCDEFG”
原字符串旋轉(zhuǎn)時反向操作即可
源代碼:
#include#include #include void reverse(char *left, char *right)//逆置函數(shù) { char temp; while (left < right) { temp = *left; *left = *right; *right = temp; left++; right--; } } void Exchange(char *str, int leng)//三步逆置 { reverse(str, str + leng-1); reverse(str + leng, str+strlen(str)-1); reverse(str, str + strlen(str) - 1); } int main() { int leng; printf("請輸入要左旋幾個字符\n"); scanf("%d", &leng); char str[] = "ABCDEFG"; Exchange(str,leng); printf("%s\n", str); system("pause"); return 0; }
二.判斷一個字符串是否是由另一個字符串旋轉(zhuǎn)而來
1.第一種思路是不借助字符串庫函數(shù),將需要判斷的字符串按照三步逆置法判斷是否和原字符串相同,但是這種方法效率較差,而且時間復(fù)雜度高。
源代碼:
#include#include #include void reverse(char *left,char *right) { char temp; while (left < right) { temp = *left; *left = *right; *right = temp; left++; right--; } } int judgeStr(char str1[],char str2[],char str3[]) { int i,m=0,sum=0,s; char *sta ; char *fina ; int length = strlen(str1); for (i = 0; i <(int)strlen(str2); i++) { str3[i] = str2[i]; } for (i = 0; i <= (int)strlen(str1) - 1; i++) { sta = str3; fina = str3 + strlen(str1) - 1; reverse(sta, sta + i); reverse(sta + i + 1, fina); reverse(sta, fina); for (; m < (int)strlen(str1); m++) { if (str1[m] != str3[m]) { sum++; break; } } for (s = 0; s<(int)strlen(str2); s++) { str3[s] = str2[s]; } if (sum == 4) { return 0; } } return 1; } int main(void) { char str1[] = "ABCDE"; char str2[] = "BCDEA"; char str3[] = "BACDE"; char stra[] = "AAAAA"; int judge; judge = judgeStr(str1, str2,stra); if (judge == 1) { printf("str2是由str1旋轉(zhuǎn)得來的\n"); } else { printf("str2不是由str1旋轉(zhuǎn)得來的\n"); } judge = judgeStr(str1, str3,stra); if (judge == 1) { printf("str3是由str1旋轉(zhuǎn)得來的\n"); } else { printf("str3不是由str1旋轉(zhuǎn)得來的\n"); } system("pause"); return 0; }
2.使用字符串庫函數(shù)解決
使用此方法需要注意到一個規(guī)律:
一個字符串后面再接一個和自身相同的字符串后,此字符串中就出現(xiàn)了所有旋轉(zhuǎn)可以得到的結(jié)果。
eg:
A B C D A B C D,其中有所有的“ABCD”旋轉(zhuǎn)結(jié)果,BCDA(2~5),CDAB(3~6),DABC(4~7)。
所以做法就是利用庫函數(shù)將原字符串拼接一個自身,再在字符串中查找需要判斷的字符串即可。
源代碼:
#include#include int judge(char *str1, char *str2) { strncat(str1, str1, strlen(str1));//原字符串拼接本身 char *result = strstr(str3, str2);//查找目標(biāo)字符串 if (result == NULL) { return -1; } else { return 0; } } int main() { char str1[] = "ABCDE"; char str2[] = "CDEAB"; char str3[] = "DEBAC"; int result = judge(str1, str2); if (result == -1) { printf("str2不是由str1旋轉(zhuǎn)得到\n"); } else { printf("str2是由str1旋轉(zhuǎn)得到\n"); } result = judge(str1, str3); if (result == -1) { printf("str3不是由str1旋轉(zhuǎn)得到\n"); } else { printf("str3是由str1旋轉(zhuǎn)得到\n"); } system("pause"); return 0; }
到此,關(guān)于“C語言怎么實現(xiàn)字符串的旋轉(zhuǎn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。