1. 程式人生 > >字串左移右移

字串左移右移

在劍指offer裡有左移的題目,牛客網上也有右移的題目。簡單的總結一下。

方法一:

假如使用string的話比較方便。

string LeftRotateString(string str, int n) {
    if(n<=0||str.size()==0)
        return str;
int len=str.size();
n=n%len;
str+=str;
return str.substr(n,len);
}

這裡使用的是將兩個string拼接在一起。然後再從拼接好的部分中去出。這裡使用的substr函式。假如是左移的話就從下標為移位的n出開始計算。假如是右移那麼就從字串長度len-n作為瞎掰哦的地方開始取。

方法二:

利用三次翻轉

class Solution {
public:

    void fun(string &s, int start, int end)

    {
       char temp;
while (start < end)
       {
            temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}

    }

    string LeftRotateString(string str, int n) {
        int len = str.length();
if (0 == len || 0 == n) return str; string &temp = str; fun(temp, 0, n - 1); fun(temp, n, len - 1); fun(temp, 0, len - 1); return str; } };

這裡用了三次翻轉。將各自部分分別翻轉,然後再總的進行一次翻轉。

方法3:

使用memcpy

void LoopMove(char *str, int steps)
{
    int len = strlen(str);
char tmp[MAXSIZE];
memcpy(tmp, str+len-steps, 
steps); memcpy(tmp+steps, str, len-steps); memcpy(str, tmp, steps); }

新建立一個臨時的變數。然後將迴圈移動後的部分賦值進去,在複製後面的部分,最後複製回原來的部分。這裡一定要注意,假如傳入的指標是指向常量的話就不能進行最後一步將臨時指標的內容複製到原指標的這一步。

方法四:

使用strcpy函式

void LoopMove(char *str, int steps)
{
    int len = strlen(str);
char tmp[MAXSIZE];
strcpy(tmp, str+len-steps);
strcpy(tmp+steps, str);
*(tmp+len)  = '\0';
strcpy(str, tmp);
}
這裡注意,在結束的時候一定要對字串最後一位進行加\0的處理。雖然strcpy會複製\0,但是由於strcpy複製是將後面的指標指向的字串整個的複製到目的字串後面,也就是說複製第二個指標的字串直到遇到\0。所以在複製完指定的字串後就一定要手動的加上結束\0

相關推薦

字串

在劍指offer裡有左移的題目,牛客網上也有右移的題目。簡單的總結一下。方法一:假如使用string的話比較方便。string LeftRotateString(string str, int n) { if(n<=0||str.size()==0)

java字串

public class StringReversal { /** * 反轉字串(迴圈交換) * 其他字串反轉的方法 * 1、java的api:StringBuffer的reverse方法 * 2、利用棧的特性(先進後出)

置位

int 裏的 通過 超過 二進制 方法 原碼 可能 字長 int i = 1;i = i << 2; //把i裏的值左移2位 也就是說,1的2進制是000...0001(這裏1前面0的個數和int的位數有關,32位機器,gcc裏有31個0),左移2位之後變成

java 中整數的運算技巧

“ << " : 左移運算子,num << n, 相當於 num 乘以2的 n 次方 " >> " : 右移運算子,num >> n, 相當於 num 除以2的 n 次方 ps: 1<<4 , 即 1×2^4=16; 2&l

計算機系統 二進位制原碼 補碼 反碼 詳解 JAVA 二進位制位運算(位與 位或 位取反 位異或

       在計算機系統中,數值一律使用補碼來表示和儲存。在探求為何計算機要使用補碼之前, 讓我們先了解原碼, 反碼和補碼的概念。   對於一個數, 計算機要使用一定的編碼方式進行儲存。 原碼, 反碼, 補碼是計算機儲存一個具體數字的編碼方式。   一個數在計算機中的二

GNU彙編邏輯或算數

lsl 左移 .text .global  _start _start:           mov r1,#0b1           mov r1,r1,lsl#2 ROR迴

位運算之運算之詳解

先看如下一段左移右移的程式碼及其結果: #include "stdio.h" char leftshift(char i, int n){if(n <0)return-1;return i<<n;}char rightshift(char i, in

如何多行同時加註釋與取消,及如何多行同時

eclipse 中如何多行同時加註釋行級註釋:Ctrl + /或Ctrl + Shift + C 加的是“//”註釋,同時也可以Ctrl + /或Ctrl + Shift + C取消“//”註釋

C語言中的

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

jQuery實現

1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>完成左移右移</title>

程式設計實現字串的迴圈

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

C opration

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

jquery以及js實現option

[html] view plain copy print? <tablecellspacing="1"width="350px"align="center">        

C語言中左運算規則

https://blog.csdn.net/u012745229/article/details/51405332左移 int i=1; i=i<<2;//把i裡面的值左移2位121的2進位制是 000…0001 (這裡前面0的個數和int的位數有關

正則刪除字串或兩端的空格經驗總結

我們前端在與後臺人員進行資料互動時,經常會碰到這樣的情況,我們經常需要獲取文字框中使用者輸入的資訊,然後通過ajax或form提交到後臺。但是在使用者輸入資訊時,我們無法保證使用者輸入的資料兩端都沒有空格。當然這些空格一般情況下是毫無意義的,因此我們有必要在將資料傳輸到後臺

字串的迴圈&迴圈

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

(字串基礎) java字串/n位的方法

package str.exercise9; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub String str="

C語言實現字串迴圈

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

給定一個字串實現對字串指定長度

給定一個字串S[0,1,...,N-1],要求把S的前k個字元移動到S的尾部,如把字串"abcdef"前面的2個字元'a','b'移動到字串的尾部,得到新字串“cdefab”;即字串迴圈左移k #i

字串或者陣列的迴圈(不開闢額外的空間存放中間值)

對於的這樣的問題,我剛開始是有點蒙逼的,感覺不開闢額外的空間怎麼實現額。。。後來想起來以前老師有提過不用額外的空間交換兩個資料的演算法,頓時感覺有思路了。說白了陣列的左移就是一個交換的過程,既然能做到