C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)

原创 2016年05月30日 17:14:38

法1:

    判断是否是其左旋再判断是否是右旋。



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Reverse(char* left, char* right)
{
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }

}


char* Left_Reverse(char* arr, int k, int len)//接收,否则无法将变化的字符串和arr2比较
{
    char* cur = arr;
    Reverse(arr, arr + k - 1);
    Reverse(arr + k, arr + len - 1);
    Reverse(arr, arr + len - 1);
    return cur;
}


char* Right_Reverse(char* arr, int k, int len)//接收
{
    char* cur = arr;
    Reverse(arr, arr + len - k - 1);
    Reverse(arr + len - k, arr + len - 1);
    Reverse(arr, arr + len - 1);
    return cur;
}


int main()
{
    char arr1[] = "AABCD";
    char arr2[] = "CDAAB";

    int len = strlen(arr1);
    int k = 0;

    //判断是否左旋得到
    for (k = 0; k < len; k++)
    {
        char* ret1 = Left_Reverse(arr1, k, len);
        if (strcmp(ret1, arr2) == 0)
        {
            printf("左旋\n");
            break;
        }
    }

    //判断是否右旋得到
    char _arr1[] = "AABCD";  //之前的arr1经过左旋后已经发生了改变
    k = strlen(arr1);  //k = len主要想从不旋转开始比较字符串
    char* ret2 = NULL;
    while (k > 0)
    {
        ret2 = Right_Reverse(_arr1, k, len);
        if (strcmp(ret2, arr2) == 0)
        {
            printf("右旋\n");
            break;
        }
        k--;
    }
    if ((k == 0) && (strcmp(ret2, arr2) != 0))
    {
        printf("既不是左旋又不是右旋\n");

    }
    system("pause");
    return 0;
}


法2:

    判断一个字符串是否是另一个字符串自身连接的子串。

    假设两个字符串分别为ABCD和DCBA,将第一个字符串“ABCD”连接成新的字符串“ABCDABCD”。再比较新的字符串"ABCDABCD“与字符串”DCBA“,判断字符串”DCBA“是不是另一个字符串的子串。如果是,则说明是旋转字符串。



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


char* my_strncat(char* dest, char* src, int size)
{
    assert(dest);
    assert(src);
    char* tmp = dest;
    while (*dest)
    {
        dest++;        
    }

    while (size)
    {
        *dest++ = *src++;    
        size--;
    }    
    *dest = '\0';
    return tmp;
}


int main()
{
    char arr1[15] = "AABCD";
    char arr2[] = "BCDAA";
    int len = strlen(arr1);
    char* ret1 = my_strncat(arr1, arr1, len);//ret1是arr1自己连接自己后的字符串

    char* ret2 = strstr(ret1, arr2);
    if (*ret2 == NULL)
    {
        printf("不是!");
    }
    else
    {
        printf("是!");
    }

    system("pause");
    return 0;
}

 

 

【c语言】判断一个字符串是否为另外一个字符串旋转之后的字符串

// .判断一个字符串是否为另外一个字符串旋转之后的字符串。 // 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0 #include ...
  • zhaoyaqian552
  • zhaoyaqian552
  • 2015年07月04日 10:03
  • 929

判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

#include #include #include int judge(char str1[],char str2[]) { int i = 0; int j = 0; ...
  • qq_39947431
  • qq_39947431
  • 2017年11月05日 12:48
  • 155

判断一个字符是否是另一个字符的旋转字符串

 方法一:将字符串1与字符串1连接,再判断字符串2是否为连接后的字符串1的子字符串,可以使用库函数实现。 #include #include #include void revovle(...
  • ranxiaoxu123
  • ranxiaoxu123
  • 2015年09月15日 16:58
  • 465

判断一个字符串是否为另外一个字符串旋转之后的字符串

判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAAB...
  • Scenlyf
  • Scenlyf
  • 2016年06月11日 18:51
  • 222

C语言判断一个字符串是否是另一个字符串的子串

int f(char*s1,char*s2) {  char *p,*q;  for(;*s1!='\0';s1++) {   if (*s2==*s1) {/*判断字符串中是否有和要判断的字串...
  • xiyangyang8
  • xiyangyang8
  • 2016年01月22日 01:34
  • 2632

判断一个字符串是否为另一个字符串的旋转后的子字符串

题目: 假定我们现在又一个函数isSubString(const string& str1, const string& str2)能够判断出字符串str2是否为str1的子串,那请给出一个方法能够...
  • acaiwlj
  • acaiwlj
  • 2013年09月08日 11:23
  • 1083

判断一个字符串是否为另外一个字符串的子串

#include #include using namespace std; bool checkchild(string &s, string &t) { int j = 0; for (in...
  • lsxpu
  • lsxpu
  • 2016年08月02日 21:57
  • 2147

C 判断字符串是否是子集

题目描述 分析 该题是在leetCode“二分搜索”类下搜到的一题难度为medium的题。从题目的意思来看,其实就是判断子串的字符顺序是否在主串中出现过,若出现过,就返回true。就题目的意思来说,...
  • DoWhatIWant_comeon
  • DoWhatIWant_comeon
  • 2017年04月11日 01:01
  • 436

c语言中判断一个字符串是否包含另一个字符串

 转载自:http://blog.csdn.net/fakine/article/details/7517417/ 1. 使用库函数 string.h  strstr函数  函数名: s...
  • striving1234
  • striving1234
  • 2017年06月16日 11:25
  • 2179

判断一个字符串是另一个的子串

#include "stdio.h" #include "string.h" #include "malloc.h" /*--------------------------------------...
  • HES_C
  • HES_C
  • 2017年08月22日 10:09
  • 863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
举报原因:
原因补充:

(最多只允许输入30个字)