1. 程式人生 > >字串迴圈右移的一道題目

字串迴圈右移的一道題目

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


	if ((strlen(pstr)<1) || (steps == 0)) {
		return(NULL);	//表示沒有操作
	}
	else {
		char *tmp = malloc(strlen(pstr) + 1);
		if (NULL != tmp) {
			strcpy(tmp, pstr + n);
			*(pstr + n) = '\0';
			strcpy(tmp + steps, pstr);//strcpy拷貝的時候,是連'\0'一起拷貝的!
			strcpy(pstr, tmp);
			free(tmp);
		}
		else {
			return(NULL);	//表示沒有操作
		}
	}
	return(pstr);
}

相關推薦

字串迴圈一道題目

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

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

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

C語言:字串迴圈

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

字串迴圈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

把一個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

字串迴圈&迴圈

直接上程式碼的了,感興趣的可以看看,挺有意思的:) package cn.edu.ccit.fangwh; import org.junit.Test; public class StringSh

C語言實現字串迴圈

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

程式設計實現字串迴圈

例題:輸入一個字串和一個整數,輸出右移後的字串。例如輸入字串str=“1234567”, 整型n=3,輸出字串str=“5671234”。思想:step1.生成一個輔助陣列temp[n]存放要前移的部分“567”。         step2.將沒有前移的部分從後向前依次向後

PAT乙級,1008,陣列元素迴圈

陣列右移就是將要移動的按順序先打印出來,然後再列印未移動的。 不過我這方法不能全部通過。 #include<iostream> #include<string> #include<vector> using namespace std; int main(

實現將一維陣列A(下標從1開始)中的元素迴圈k位,要求只用一個元素大小的輔助空間

#include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入陣列元素個數:\n"); scanf("%d",&n); for(int i=1;i<=n;i++) scanf

C語言實現陣列的迴圈

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

PAT乙級1008陣列元素迴圈

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

設計一個演算法,將一維陣列A(下標從1開始)中的元素迴圈k位,要求只用一個元素大小的附加儲存空間。給出演算法的時間複雜度。

程式碼 #include<stdio.h> #include<stdlib.h> #define n 10 int main() { int a[n] = { 0,1,2,3,4,5,6,7,8,9 }; int k, t=0,i,j,m; printf(

1008 陣列元素迴圈問題 ——C及C++實現

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

PAT(Basic Level) Practice——1008 陣列元素迴圈問題

原題目: 一個數組A中存有N(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(≥0)個位置,即將A中的資料由(A​0​​A​1​​⋯A​N−1​​)變換為(A​N−M​​⋯A​N−1​​A​0​​A​1​​⋯A​N−M−1​​)(最後M個數迴圈移至最前面的M個位置)

練習7-8 方陣迴圈 (20 point(s)

練習7-8 方陣迴圈右移 (20 point(s)) 本題要求編寫程式,將給定n×n方陣中的每個元素迴圈向右移m個位置,即將第0、1、⋯、n−1列變換為第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。 輸入格式: 輸入第一行給出兩個正整數m和n(1≤n≤6)。接下來一共n行,

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

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

資料結構-起步能力自測題-自測-3 陣列元素迴圈問題

  輸入格式: 每個輸入包含一個測試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個整數,之間用空格分隔。 輸出格式: 在一行中輸出迴圈右移M位以後的整數序列,之間用空格分隔,序列結尾不能有多餘空格。 輸入樣例: 6 2 1 2 3 4 5 6 輸出樣