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