码迷,mamicode.com
首页 > 编程语言 > 详细

C语言判断字符串是否旋转过

时间:2018-11-10 23:49:15      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:sssss   null   nbsp   lib   std   turn   fine   pre   没有   

//方法一
//每次左旋一次,判断旋转之后字符串是否与目标字符串是否一致 
//旋转一圈  没有找到返回0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void left_rotate(char *str, int k)
{
    int len = strlen(str);
    k %= len;//减少重复次数

    char temp = 0;
    char *cur = str;
    while (k--)
    {

        //左旋一次
        temp = *str;
        cur = str;
        while (*(cur + 1) != \0)
        {
            //每个字符向前推一个
            *cur = *(cur + 1);
            cur++;
        }

        *cur = temp;
    }
}

int is_rotate(char *dest, char* src)
{
    if (strlen(dest) != strlen(src))
    {
        printf("不是旋转过的!\n");
        return 0;
    }
    if (!strcmp(dest, src))
    {
        printf("旋转过的!\n");
        return 1;
    }

    int k = strlen(dest);
    k--;
    while (k--)
    {
        //每次旋转一次 判断
        left_rotate(src, 1);
        //判断旋转之后的内容是否和目标一致
        if (!strcmp(dest, src))
        {
            printf("旋转过的!\n");
            return 1;
        }
    }
    printf("不是旋转过的!\n");
    return 0;

}

//方法二 dest--->abcd 把目标串拼接相同的内容abcdabcd   判断源串是否为目标串的子串 
//                                  src---->cdab
int is_rotate02(char *dest, char* src)
{
    if (strlen(dest) != strlen(src))
    {
        printf("不是旋转过后的!\n");
        return 0;
    }
    strncat(dest, dest,strlen(dest));
    if (strstr(dest, src) != NULL)
    {
        printf("是旋转过后的!\n");
        return 1;
    }
    printf("不是旋转过后的!\n");
    return 0;

}

int main()
{
    char dest[100] = "sssss";
    char src[100] = "avdasf";
    is_rotate02(dest, src);
    
    system("pause");
    return 0;
}

 

C语言判断字符串是否旋转过

标签:sssss   null   nbsp   lib   std   turn   fine   pre   没有   

原文地址:https://www.cnblogs.com/Duikerdd/p/9940828.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!