1. 程式人生 > >字串中旋轉字元,旋轉字元並判斷是否為另一個字串旋轉得到的。

字串中旋轉字元,旋轉字元並判斷是否為另一個字串旋轉得到的。

1.實現一個函式,可以左旋字串中的k個字元。
ABCD左旋一個字元得到BCDA
ABCD左旋兩個字元得到CDAB

思路:

我們可以先讓應該旋轉的k個字元翻轉,再讓其他的字元翻轉,最後一起翻轉,就能夠實現字元的旋轉。

程式碼:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

void Reverse(char *p,char *q)//字串的翻轉
{
    while(p < q)  
    {  
        char a = *p;  
        *p = *q;  
        *q = a;  
        p++;  
        q--;  
    }  
}  
void
Leftturn(char *a, int len,int n)//旋轉字元函式 { Reverse(&a[0],&a[n-1]);//前k個字元翻轉 Reverse(&a[n],&a[len-1]);//其它字元翻轉 Reverse(&a[0],&a[len-1]);//所有字元一起翻轉 } int main() { char arr[] = "ABCDE"; int s = 0; int sz = strlen(arr); printf("請輸入想要旋轉字元個數\n"); scanf
("%d",&s); Leftturn(arr,sz,s); printf("%s",arr); return 0; }

2.判斷一個字串是否為另外一個字串旋轉之後的字串。
例如:給定s1 = AABCD和s2 = BCDAA,返回1,給定s1=abcd和s2=ACBD,返回0.

AABCD左旋一個字元得到ABCDA
AABCD左旋兩個字元得到BCDAA

AABCD右旋一個字元得到DAABC

思路:

在上一題的基礎上做出右旋,並且運用strcmp函式來進行驗證。

程式碼:

#include<stdio.h>
#include<string.h>
#include<stdlib.h> void Reverse(char *p,char *q) { while(p < q) { char a = *p; *p = *q; *q = a; p++; q--; } } int Judgeturn(char a[],char b[], int len) { int i = 0; char *p = malloc(len);//開闢一個動態空間 // 左旋 for(i=0; i<len; i++) { strcpy(p,a);//將a字串複製給動態p Reverse(&p[0],&p[i]); Reverse(&p[i+1],&p[len-1]); Reverse(&p[0],&p[len-1]); if(strcmp(p,b) == 0)//旋轉後的字串p與字串b對比驗證 { return 1; } } // 右旋 for(i=0; i<len; i++) { strcpy(p,a); Reverse(&p[len-i],&p[len-1]); Reverse(&p[0],&p[len-i-1]); Reverse(&p[0],&p[len-1]); if(strcmp(p,b) == 0) { return 1; } } return 0; free(p); } int main() { char arr[] = "ABCDE"; char s[] = "DEABC"; int sz = strlen(arr); int ret = 0; ret = Judgeturn(arr,s,sz); if( ret == 1) { printf("是由原字串旋轉得到的\n"); } else { printf("不是由原字串旋轉得到的\n"); } return 0; }

相關推薦

字串旋轉字元旋轉字元判斷是否一個字串旋轉得到的

1.實現一個函式,可以左旋字串中的k個字元。 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB 思路: 我們可以先讓應該旋轉的k個字元翻轉,再讓其他的字元翻轉,最後一起翻轉,就能夠實現字元的旋轉。 程式碼: #de

給定兩個字串請設計一個方法來判定其中一個字串是否一個字串的置換(容易)

在vs2013寫的程式,使用sort進行排序,然後對比是否完全一樣即可/* 給定兩個字串,請設計一個方法來判定其中一個字串是否為另一個字串的置換。 置換的意思是,通過改變順序可以使得兩個字串相等。 */ #include "stdafx.h" #include <i

判斷字串能否通過數次取尾部置前操作得到一個字串

輸入第一行為數字t,t為字串輸入行數 剩下t行每兩行一組,每組判斷。 import java.awt.geom.CubicCurve2D; import java.util.Scanner; public class Main { public static voi

程式設計:判斷一個字串是否一個字串的子串

#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char *str, *ptr; int i, len_str, len_pt

1.實現一個函式可以左旋字串的k個字元 2.判斷一個字串是否另外一個字串旋轉之後的字串

1.實現一個函式,可以左旋字串中的k個字元 ABCD左旋一個字元得到BCDA ABCD左旋兩個字元得到CDAB #include<stdio.h> #include<string.h> void left_move(char*str, int

通過鍵盤輸入一個字串判斷字串出現最多的字元輸出該字元和輸出出現次數

package com.test;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class JudeCount {    /**     * @param args 

有一字串包含n個字元寫一函式將此字串從第m個字元開始的全部字元複製成為一個字串

import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanne

C語言實現判斷一個字元竄是否另外一個字串旋轉之後的字串

 //判斷一個字元竄是否為另外一個字串旋轉之後的字串    例如:給定s1 = AABCD和s2 = BCDAA,返回1,給定s1 = abcd和s2 = ACBD,返回0.               // AABCD左旋一個字元得到ABCDA              

ACMNO.40 C語言-子串 有一字串包含n個字元寫一函式將此字串從第m個字元開始的全部字元複製成為一個字串

題目描述 有一字串,包含n個字元。 寫一函式,將此字串中從第m個字元開始的全部字元複製成為另一個字串。 輸入 數字n 一行字串 數字m 輸出 從m開始的子串 樣例輸入 6 abcdef 3 樣例輸出 cdef 來源/分類 C語言

去除字串所有的非英文字元再統計每種英文字元的個數(不區分大小寫)

import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestString {public static void mai

【c語言】一個字串包含n個字元將此字串從第m個字元開始的全部字元複製成為一個字串

#include <stdio.h> #include <string.h> int main() { void copystr(char *,char *,int); int m; char str1[20],str2[20]; print

統計字串的字母數字空格和其他字元的個數---指標

// 編寫一個函式用實參傳來一個字串,統計此字串中字母,數字,空格,和其他的字元的個數,在主函式中輸入字串,以及輸出上述結果; #include<stdio.h> #include<string.h> int main() {int l=0,n=0,

設計一個函式實現將一個字串的大寫字元變為小寫字元小寫字元變為大寫字元數字不變刪除其他字元

例如 String str=“[email protected]#”;呼叫這個函式執行後得到的結果是:ABC123abc。 貼出程式碼: package com.lovo.t_9_22; import java.util.ArrayList; import j

MySQL:字串的數字、英文字元、漢字提取

原文:https://blog.csdn.net/oyezhou/article/details/81665643 另外一篇類似的:https://blog.csdn.net/haijiege/article/details/79460236 建立一個Num_char_

swift 字串的第一個唯一字元 - LeetCode

給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.   注意事項:您可以假定該字串只包含小寫字母。 class Solut

每日一題--LeetCode 387 (字串的第一個唯一字元)java

題目描述: 程式碼如下: class Solution { public int firstUniqChar(String s) { String tmp=s; char []data=tmp.toCharArray(); if(

字串的第一個唯一字元 C++演算法 leetcode387

題目:字串中的第一個唯一字元 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。 解答: 用雜

筆試-刪除字串出現次數最少的字元

題目描述 實現刪除字串中出現次數最少的字元,若多個字元出現次數一樣,則都刪除。輸出刪除這些單詞後的字串,字串中其它字元保持原來的順序。 輸入描述: 字串只包含小寫英文字母, 不考慮非法輸入,輸入的字串長度小於等於20個位元組。 輸出描述: 刪除字串中出現次數最少的字元後

面試題:一個字串包含英文和特殊字元特殊字元不變英文順序反過來比如string str="[email 

public class Reverse { public static void main(String[] args) { String str = "[email protected]!tk"; char[] chars = str.toCh

LeetCode題目--字串的第一個唯一字元(python實現)

題目 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。   p