程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> [C語言] 左旋字符串

[C語言] 左旋字符串

編輯:關於C語言

[C語言] 左旋字符串


實現一個函數,可以左旋字符串中的k個字符
 
方法一:開辟另一個數組,先把第k+1後面的字符寫入這個數組中,再把要左旋的k個字符寫進去
 
實現如下:
 
#include<stdio.h>
#include<assert.h>
#include<string.h>
 
void left_Relvove(char *str,char *arr,int k)
{
    char *pcur = str+k;     //先讓指針從第k+1個字符開始,存進arr數組裡
    assert (str && arr);        //斷言
    while(*pcur)            //從第k+1個字符開始,遇到'\0'跳出
    {
        *arr++ = *pcur++;   
     
    }
    pcur = str;  //把第k+1後面的字符寫到arr中後,把指針調向str首元素,開始寫入要旋轉的k個字符
    while(k)
    {
        *arr++ = *pcur++;
        k--;
    }
    *arr='\0';
}
 
int main()
{
    int k;
    char str[10] = {0};
    char arr[10] = {0};
    scanf("%d", &k);
    scanf("%s",str);
    left_Relvove(str,arr,k);
    printf("%s\n",arr);
    return 0;
}
 
 
方法二:定義一個字符串翻轉函數,把要左旋的k個字符先逆序翻轉,再把k+1後的字符
逆序翻轉,最後把整個字符串逆序翻轉
 
實現如下:
 
#include<stdio.h>
#include <string.h>
 
void reserve(char *left,char*right) 
{
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main()
{
    char arr[10] = "AABCD"; 
    int len = strlen(arr)-1;
    int k = 0;
    char *pstart = &arr[0];
    char *pend = arr+len;
    scanf("%d", &k);
    reserve(pstart, pstart + k -1); //把要左旋的k個字符先逆序翻轉
    reserve(pstart + k, pend);      //把k+1後的字符逆序翻轉
    reserve(pstart, pend);          //整個字符串逆序翻轉
    printf("%s\n", arr);
    system("pause");
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved