? 看到這個(gè)左移動(dòng)的時(shí)候就想到了 之前看的一個(gè)視頻,原理和這個(gè)類似。
左移k個(gè)元素,就先把前 k 個(gè)元素 逆序,再把后面剩下的元素逆序,然后再整體逆序;舉個(gè)例子:
假如說輸入的字符串是 "hello world!", k??= 2? ,我們先把 "he" 逆序 然后再把 "llo world!"逆序
然后再對逆序之后的再逆序一次,就可以的我們要想要的結(jié)果。?
因?yàn)橐褂枚啻文嫘?,我選擇把逆序?qū)懗梢粋€(gè)函數(shù),使用時(shí)直接調(diào)用即可。
?通過傳入的左右指針我們知道需要逆序的位置
?當(dāng)k =2 時(shí),我們需要逆序的是 he這里,這時(shí)候指針指向的位置是
指針-指針表示的是兩個(gè)指針之間的元素個(gè)數(shù),加上1 為要逆序的個(gè)數(shù),再除以2表示要執(zhí)行幾次交換。k=2是 只需要交換一次 k = 5時(shí) 交換三次,當(dāng)執(zhí)行第三次的時(shí)候 left 和right指向同一個(gè)位置,不滿足條件就會(huì)退出。(不加? left != right 也是可以過的 只不過會(huì)多進(jìn)行一次浪費(fèi)一點(diǎn)點(diǎn)時(shí)間)
逆序的過程就是 交換左右的值 然后左右指針再同時(shí)向中間靠近。
我通過i 作為下標(biāo)進(jìn)行輸入,同時(shí) i 也作為記錄輸入字符長短的工具,i的值也就是\n出現(xiàn)之前的字符串的長度。
當(dāng)k輸入的過大時(shí)我們還需要注意,如果k == i 那就是一整個(gè)逆置一圈,相當(dāng)于沒有逆置,當(dāng)k的值大于i 時(shí),實(shí)際上逆置的次數(shù)只有 k%i 次 所以 我用? k = k%i 來規(guī)范 輸入的K ,當(dāng)然也可以寫成k%=i? ;
最后只需要在main()函數(shù)里調(diào)用三次 逆序函數(shù)就可以了,下面是代碼:
#includevoid my_switch(char* left, char* right);
int main()
{
char ch[100] = { 0 };
int k = 0;
int i = 0;
ch[i] = getchar();
while (ch[i] != '\n')
{
i++;
ch[i] = getchar();
}
scanf("%d", &k);
k = k%i ;
//先逆序 0 - k-1 所有的元素
my_switch(&ch[0], &ch[k - 1]);
//再逆序 k-1 -sz-1所有的元素
my_switch(&ch[k], &ch[i -1]);
//最后 逆序所有的元素
my_switch(&ch[0], &ch[i -1]);
for (int j = 0; j< i; j++)
{
printf("%c", ch[j]);
}
return 0;
}
//使用一個(gè)左邊值和一個(gè)右值
void my_switch(char *left, char* right)
{
int x = (right - left + 1) / 2;
for (int i = 0; i< x && right != left; i++)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文標(biāo)題:PTAC語言7-31字符串循環(huán)左移-創(chuàng)新互聯(lián)
文章起源:http://aaarwkj.com/article10/piodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站改版、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站策劃、靜態(tài)網(wǎng)站、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容