1. 程式人生 > >C語言:字串迴圈右移

C語言:字串迴圈右移

編寫一個程式,作用是把一個字串從末尾開始迴圈右移n個,如"abcdef",n=3,則輸出'defabc";"12345",n=2,則輸出"45123";

思路:用迴圈,每次都把最後一個字元元素挪到首元素的位子,其餘元素位子後移一個,共n次。

void main()
{int len,i,n;
char a[80];
printf("please input an integer and a string\n");
scanf("%d%s",&n,a);
len=strlen(a)-1;
while(n--)
{char c=a[len];
for(i=len;i>0;i--)
 a[i]=a[i-1];
a[0]=c;}
printf("%s",a);
}

總結:主要是迴圈,while迴圈共n次,先把尾元素a[len]保留下來賦值給c;再用一個內迴圈for()把所有元素後移一,空出來的a[0]用c補。

我最先想到的方法是用兩個並列的for()語句:一個操作後n個元素使其左移到相應位子,一個操作其餘元素使其右移到相應位子,然後賦值給新定義的陣列b,輸出b。

可是存在一個有亂碼字尾的問題,

因為是字串,所以會有'\0'的存在,不知道怎麼處理?求指教。

相關推薦

C語言字串迴圈

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

C語言實現字串迴圈

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

C語言字串逆置(迴圈法,遞迴寫法)

環境:Windows8,Visual Studio 2013 語言:C語言 字串逆置: 將一個一直字串的順序逆序排放保存於同一個空間內,長度,記憶體地址均不改變 方法一:

字串迴圈c實現

一個長度為len的字串,對其迴圈右移n位 [期望] char str[] = "abcdefg"; 右移3次後,變成"efgabcd" [思路] 思路1. 如果用每移動一次,就要把整個字串整體移動一次的方法,顯得太費勁了。 我們可以用空間換時間,通過記憶體拷貝來實現。 需要新申請一塊相同大小的記憶體,把

編寫一個函式,作用是把一個char組成的字串迴圈n個。比如原來是“abcdefghi”如果n=2,移位後應該是“hiabcdefg” 函式頭是這樣的

void Loopover(char *str,int steps){int len=strlen(str);char tmp[len+3];strcpy(tmp,str+len-steps);strcpy(tmp+2,str);tmp[len]='\0';strcpy(st

C語言字串處理類函式

strlen() 求字串的實際長度(不包括'\0')   strcpy() char *strcpy(char* dest, const char *src); strcpy(目標串,源串); strcp

【練習題】編寫一個函式,把一個char組成的字串迴圈n位

例如:原來是”abcdefghi”,如果n = 2,移位後應該是”hiabcdefg”。 思路:當讀到這個題目的時候,沒有編寫過類似程式的人可能會想,程式的實現就是依照字元的迴圈右移這樣實現的,但仔細想會發現這樣很難實現,不妨換一種思路,我們先把需要移到前面的字元取出來放進

C++ 1008 陣列元素迴圈問題 (20)(20 分)

思路: 在輸入的時候就判斷移動之後每個元素的位置,直接輸入到指定位置之後輸出。 位置變換對應關係: 初始   變化後 0    N-M 1    N-M+1 2    N-M+2 ... ... M-1     N-1 ----------------

字串迴圈的一道題目

void * loopmove_3(char *pstr, int steps) { int n = strlen(pstr);//不包含\0 steps %= n;//移動的步數 n -= s

C/C++】陣列元素迴圈問題

自測-3 陣列元素迴圈右移問題(20 分) 一個數組A中存有N(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(≥0)個位置,即將A中的資料由(A​0​​A​1​​⋯A​N−1​​)變換為(A​N−M​​⋯A​N−1​​A​0​​A​1​

把一個char組成的字串迴圈n位

void LoopMove(char *pStr, int steps) { int n = strlen(pStr) - steps; char temp[MAX_LEN]; strcpy(temp, pStr + n); strcpy(temp + steps,

實現字串迴圈n 位與左n位(建立陣列)

編寫一個函式,作用是把一個 char 組成的字串迴圈 右移 n 個。 比如原來是“abcdefghi” 如果 n=2,移位後應該是“hiabcdefgh”   左移n個 比如原來是“abcdefghi

C語言實現陣列的迴圈

#include <stdio.h> #include <stdlib.h> #define N 100 int main() {    int i, j, x[N], a, b;    printf("請輸入你想右移的數字

PTA-陣列元素迴圈問題(C語言

輸出格式: 在一行中輸出迴圈右移M位以後的整數序列,之間用空格分隔,序列結尾不能有多餘空格。 輸入樣例: 6 2 1 2 3 4 5 6 輸出樣例: 5 6 1 2 3 4 做這個題我覺得還是摳字眼三個字比較重要,比如說不許另加陣列,但是可以把一個數組做的空間大一些就可以簡單轉移了;0

PAT 乙級 1008陣列元素迴圈問題 C語言

1008. 陣列元素迴圈右移問題 (20) 題目: 一個數組A中存有N(N>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(M>=0)個位置,即將A中的資料由(A0 A

C語言正數和負數迴圈,左,把某正數的第m位(從0開始)到n位取反

問題:從鍵盤輸入一個整型數(int型),然後再輸入一個正整數m,把第一個數迴圈右移m位後輸出; int型別佔用32位。第一位為符號位,1則為負數,0為正數。 >>往右移動,右邊的丟棄,如果是正數,則左邊補0,如果是負數則補1. <<往左移動,每次移動

(PAT乙級)1008 陣列元素迴圈問題(C語言實現)

總結:1、思路:定義陣列空間時大一些,將前(N-M)個數移到N個數後。即利用本陣列多餘的空間來儲存數字,也相當於構建了                  另一個數組的作用。            2、坑點:不要想當然地認為N>M,所以在M>N時需要對M進行處

PAT Basic 1008. 陣列元素迴圈問題 (20)(C語言實現)

, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目一個數組A中存有N(N>0)個整數,在不允許使用另外陣列的前提下,將每個

C語言實現按位迴圈迴圈

ror eax,cl ==> eax=(eax>>cl)+(eax<<(sizeof(eax)-cl));rol eax,cl ==> eax=(eax<<cl)+(eax

c語言用for迴圈輸入字串

#include<stdio.h> #include<string.h> int main(){     char a[3][10]={"abc"};     char b[10];    &