1. 程式人生 > >C語言實現字串迴圈左移和右移

C語言實現字串迴圈左移和右移

C語言實現迴圈左移和右移

這個沒有什麼好說的,直接上程式碼:

#include <stdio.h>

//寫一個函式 實現功能:輸入字串,向右迴圈或者逆時針移動N位元組,再輸出這個字串
/*
    //比如:左移2位元組
    //左邊不變,右邊變
    p[0] = s[4];  //LEN - (n - i)%LEN i = 0
    p[1] = s[5];  //LEN - (n - i)%LEN i = 1
    p[2] = s[0];  //LEN - (n - i)%LEN i = 2
    p[3] = s[1];  //LEN - (n - i)%LEN i = 3
    p[4] = s[2];  //
    p[5] = s[3];  //
    //右邊不變,左邊變
    p[2] = s[0];  //a   len - (n - i)%LEN i = 0
    p[3] = s[1];  //b                     i = 1
    p[4] = s[2];  //c                     i = 2
    p[5] = s[3];  //d                     i = 3
    p[0] = s[4];  //e  len -                    i = 4
    p[1] = s[5];  //f                     i = 5
    
    p[(n + i)%LEN] = src[i];
    
    //比如:左移5位元組
    
    p[0] = s[1];  //len - (n - 0)%LEN   i = 0
    p[1] = s[2];  //len - (n - 1)%LEN   i = 1
    p[2] = s[3];  //len - (n - 2)%LEN   i = 2
    p[3] = s[4];  //len - (n - 3)%LEN   i = 3
    p[4] = s[5];  //len - (n - 4)%LEN   i = 4
    p[5] = s[0];  //len - (n - 5)%LEN   i = 5
    
    
    
*/
//左邊不變,右邊變
void ClockWise1(const char* src,char* result,int n)
{
    const unsigned int LEN = strlen(src);
    int i;
    n = n%LEN;
    for(i = 0;i < LEN;i++)
    {
        result[i] = src[(LEN - (n - i))%LEN];
    }
    result[i] = '\0';   
} 
//右邊不變,左邊變
void ClockWise2(const char* src,char* result,int n)
{
    const unsigned int LEN = strlen(src);
    int i;
    for(i = 0;i < LEN;i++)
    {
        result[(n + i)%LEN] = src[i];
    }  
    result[i] = '\0';   
}

void ClockWise3(const char* src,char* result,int n)
{
    const unsigned int LEN = strlen(src);
    int i;
    n = n%LEN;
    for(i = 0;i < n;i++)//也可以用strcy代替,下面函式就是
    {
        result[i] = src[LEN - n + i];
    } 
    for(i = 0;i < LEN - n;i++)
    {
        result[n + i] = src[i];
    }
    result[LEN] = '\0';   
}  
void ClockWise4(const char* src,char* result,int n)
{
    const unsigned int LEN = strlen(src);
    int i;
    n = n%LEN;
    strcpy(result,src + LEN - n);
    strcpy(result + n,src);
    result[LEN] = '\0';   
}
//寫一個函式 實現功能:輸入字串,向左迴圈或者順時針移動N位元組,再輸出這個字串
/*
    //比如:左移移2位元組
    //左邊不變,右邊變
    p[0] = s[2];  //(n + i)%LEN
    p[1] = s[3];  
    p[2] = s[4];  
    p[3] = s[5];  
    p[4] = s[0];  
    p[5] = s[1];  
    //右邊不變,左邊變
    p[5] = s[0];  //b (LEN - n + i)%LEN   i = 0
    p[0] = s[1];  //c                     i = 1
    p[1] = s[2];  //d                     i = 2
    p[2] = s[3];  //e                     i = 3
    p[3] = s[4];  //f               i = 4
    p[4] = s[5];  //a                     i = 5
    
    //比如:左移5位元組
    
    
*/   
void AntiClockWise1(const char* src,char* result,unsigned int n)
{
    const unsigned int LEN = strlen(src);
    int i;
    for(i = 0;i < LEN;i++)
    {
        result[i] = src[(n + i)%LEN]; 
    }
    result[i] = '\0';
}  
void AntiClockWise2(const char* src,char* result,unsigned int n)
{
    const unsigned int LEN = strlen(src);
    int i;
    n = n%LEN;
    for(i = 0;i < LEN;i++)
    {
        result[(LEN - n + i)%LEN] = src[i];
    }
    result[i] = '\0';
} 
void AntiClockWise3(const char* src,char* result,unsigned int n)
{
    const unsigned int LEN = strlen(src);
    int i;
    n = n%LEN;
    for(i = 0;i < n;i++)
    {
        result[LEN - n + i] = src[i];
    }
    for(i = 0;i < LEN - n;i++)
    {
        result[i] = src[n + i];
    } 
    result[LEN] = '\0'; 
}    
int main()
{
    char result[255] = {0};
    printf("ClockWise1 start\n");
    ClockWise1("abcdef",result,3);
    printf("%s\n",result);
    ClockWise1("abcdef",result,5);
    printf("%s\n",result);
    ClockWise1("abcdef",result,8);
    printf("%s\n",result);
    ClockWise1("abcdef",result,12);
    printf("%s\n",result);   
    printf("ClockWise1 end\n\n");
    
    printf("ClockWise2 start\n");
    ClockWise2("abcdef",result,3);
    printf("%s\n",result);
    ClockWise2("abcdef",result,5);
    printf("%s\n",result);
    ClockWise2("abcdef",result,8);
    printf("%s\n",result);
    ClockWise2("abcdef",result,12);
    printf("%s\n",result);   
    printf("ClockWise2 end\n\n");
    
    printf("ClockWise3 start\n");
    ClockWise3("abcdef",result,3);
    printf("%s\n",result);
    ClockWise3("abcdef",result,5);
    printf("%s\n",result);
    ClockWise3("abcdef",result,8);
    printf("%s\n",result);
    ClockWise3("abcdef",result,12);
    printf("%s\n",result);   
    printf("ClockWise3 end\n\n");
    
    printf("ClockWise4 start\n");
    ClockWise4("abcdef",result,3);
    printf("%s\n",result);
    ClockWise4("abcdef",result,5);
    printf("%s\n",result);
    ClockWise4("abcdef",result,8);
    printf("%s\n",result);
    ClockWise4("abcdef",result,12);
    printf("%s\n",result);   
    printf("ClockWise4 end\n\n");
    
    printf("AntiClockWise1 start\n");
    AntiClockWise1("abcdef",result,3);
    printf("%s\n",result);
    AntiClockWise1("abcdef",result,5);
    printf("%s\n",result);
    AntiClockWise1("abcdef",result,8);
    printf("%s\n",result);
    AntiClockWise1("abcdef",result,12);
    printf("%s\n",result);   
    printf("AntiClockWise1 end\n\n");   
    
    printf("AntiClockWise2 start\n");
    AntiClockWise2("abcdef",result,3);
    printf("%s\n",result);
    AntiClockWise2("abcdef",result,5);
    printf("%s\n",result);
    AntiClockWise2("abcdef",result,8);
    printf("%s\n",result);
    AntiClockWise2("abcdef",result,12);
    printf("%s\n",result);   
    printf("AntiClockWise2 end\n\n"); 
    
    printf("AntiClockWise3 start\n");
    AntiClockWise3("abcdef",result,3);
    printf("%s\n",result);
    AntiClockWise3("abcdef",result,5);
    printf("%s\n",result);
    AntiClockWise3("abcdef",result,8);
    printf("%s\n",result);
    AntiClockWise3("abcdef",result,12);
    printf("%s\n",result);   
    printf("AntiClockWise3 end\n\n");
    return 0;
}

沒列印完,你們可以自己除錯看下

參考資料《狄泰軟體C語言進階》

相關推薦

C語言實現字串迴圈

C語言實現迴圈左移和右移這個沒有什麼好說的,直接上程式碼:#include <stdio.h> //寫一個函式 實現功能:輸入字串,向右迴圈或者逆時針移動N位元組,再輸出這個字串 /* //比如:左移2位元組 //左邊不變,右邊變 p[0

C語言位運算子:與、或、異或、取反、

語言位運算子:與、或、異或、取反、左移和右移 位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。C語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。 C語言提供的位運算

C語言裡的運算

左移 左移就是把一個數的所有位都向左移動若干位,在C中用<<運算子.例如: int i = 1; i = i << 2; //把i裡的值左移2位 也就是說,1的2進位制是000…0001(這裡1前面0的個數和int的位數有關,

C語言字串迴圈

編寫一個程式,作用是把一個字串從末尾開始迴圈右移n個,如"abcdef",n=3,則輸出'defabc";"12345",n=2,則輸出"45123"; 思路:用迴圈,每次都把最後一個字元元素挪到首元素的位子,其餘元素位子後移一個,共n次。 void main() {

C語言位運算子及作用:與、或、異或、取反、

一、& 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 應用:(1)清零 若想對一個儲存單元清零,即使其全部二進位制位為0,只要找一個二進位制數,其中各個位符合一下條件: 原來的數中為1的位,新數中相應位為0。然後使二者進行&運算,即可

java實現迴圈的簡單演算法

 byte a=112,用程式實現,將其迴圈左移三位和右移三位。 112的二進位制原碼:0111 0000 112迴圈左移3位後的二進位制碼:1000 0011 112迴圈右移3位後的二進位制碼:0000 1110 先將迴圈左移的程式程式碼告訴大家: public clas

C語言實現字串英文字母大小寫的轉換

題目: 輸入一串字串,將其中的大寫字母換成小寫,小寫字母換成大寫輸出。例如輸入abcdefghijklmnopq,輸出ABCDEFGHIJKLMNOPQ 思路: 大寫字母轉換為小寫字母+32,小寫字母轉換為大寫字母-32;可以用for迴圈+陣列形式完成,也可利用while迴圈完成,我選擇了更容易理解的w

C語言實現字串倒序

程式: #include <stdio.h> #include <stdlib.h> #include <string.h> int fun(char *w) { char t, *s1,*s2; int n = strlen(

C語言實現圖的鄰接矩陣鄰接表儲存

C語言實現圖的鄰接矩陣和鄰接表儲存,其中包含如下函式: CreateMat(MatGraph &g, int A[MAXV][MAXV], int n, int e):由邊陣列A、頂點數n和邊數e建立圖的鄰接矩陣g。 DispMat(MatGraph g):輸出鄰接矩陣g

c語言實現雙向迴圈連結串列

此次工程還是使用了3個原始檔list.h(標頭檔案原始碼),main.c(實現介面的具體程式碼),list.c(單鏈表邏輯) list.h #pragma once #include<stdio.h> #include<stdlib.h> #include

使用C語言實現字串分割

之前分享了一篇使用C++(std::string 作為容器)進行字串分割的博文: https://blog.csdn.net/r5014/article/details/82802664   現在又想用C語言做一個字串分割的函式,大概功能是這樣: 需要分割的字串“ &n

資料結構之---C語言實現哈夫曼樹編碼

//哈夫曼樹 //楊鑫 #include <stdio.h> #include <stdlib.h> typedef int ElemType; struct BTreeNode { ElemType data; struct BTr

C/C++裡面的

int i = 1;i = i << 2; //把i裡的值左移2位也就是說,1的2進位制是000...0001(這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0),左移2位之後變成000... 0100,也就是10進位制的4,所以說左移1位相當於乘以2,那麼左移n位就是乘以2的

C語言實現隊(迴圈佇列)

之前用連結串列實現隊,這裡用陣列實迴圈佇列,今天又看了一下佇列,發現少了計算佇列長度的函式 佇列的實現程式碼,犧牲一個元素儲存空間 #include<stdbool.h> #define maxsize 10 typedef int datatype; //定

c語言實現資料夾的建立刪除

參考: ########################################################## 判斷資料夾是否存在: 在windows環境下標頭檔案為: #include <io.h> 在linux環境

C語言實現迴圈單鏈表

#include"stdlib.h" typedef struct listnode{ char* data; struct listnode* next; }listnode; listnode* init() { listnode* head = (listnode*)malloc(

C語言實現字串英文字母大小寫轉換

Q:輸入一串字串,將其中的大寫字母換成小寫,小寫字母換成大寫輸出。 Eg:輸入abdAd,輸出ABDaD 思路: 把’A’變為’a’ 我們需要把01000001變為01100001,即把第六位的0變成1,十進位制為32,只需要+32,把’a’變為’A’同理

C語言實現字串的大小寫轉換

'a'對應的16進位制是 61 轉換成 2進位制 011000010xdf對應的 2進位制 11011111 & 01100001 = 01000001 對應的 ASC2 表裡的字母 是'A'    ,小寫轉換一樣     

c語言實現單向迴圈連結串列

//單迴圈連結串列, 在單鏈表的基礎上, 每建立一個節點,讓其後繼預設指向head //最終保證最後一個節點的後繼指向Head則構成單迴圈連結串列//不帶頭節點判空: head == NULL //帶頭節點判空:  head->next == head; 為空 //與

C語言實現字串字元逆置

/* * 檔名: stringReverse.c * 檔案功能描述: 把字串的所有字元逆置 * 編寫人:王廷雲 * 編寫日期:2017-1-10 */ #include <stdio.h