编写一个函数,可以左旋字符串中k个字符

题目:

实现一个函数,可以左旋字符串中的k个字符。

例如:

abcdef左旋一个字符得到bcdefa

abcdef左旋两个字符得到cdefab

题目分析:

对于这个问题,可以用很多种方法求解,这里介绍两种方法:

算法一:

左旋字符串的k个字符,我们可以先将剩下的n-k个字符移动最前面,然后将左旋的k个字符移动到字符串的最后面的位置,这就完成了字符串左旋k个字符的功能。其中,对于n-k个字符的移动,可以利用while循环,将后面的字符逐一进行拷贝。下面是具体的程序:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
 
void left_move(char *str, int num)
{
    int i = 0;
    for (i = 0; i < num; i++)
    {
        char tmp = *str;
        int j = 0;
        while (*(str + 1 + j))     //将后面的字符移动到前面位置
        {
            *(str + j) = *(str + 1 + j);
            j++;
         }
        *(str + j) = tmp;    //将前面左旋的字符移动到后面
    }
}
 
int main()
{
    char arr[10] = "abcdef";
    left_move(arr, 2);
    printf("输出左旋之后的字符串:\n");
    printf("%s\n" , arr);
    system("pause");
    return 0;
}

算法二:

对于左旋字符串k个字符,可以将左旋的k个字符进行逆置,然后将剩下的n-k个字符进行逆置,最后,将整个字符串进行逆置,即就是:abcdef左旋两个字符,对ab进行逆置得到ba,对cdef进行逆置得到fedc,最后将整个字符串bafedc进行逆置得到cdefab,这就完成了题目要求。下面为具体的程序:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char exchange( char *left, char *right )
{
     char *p = left;
     char tmp = 0;
     while(left != NULL && right != NULL && left < right)
     {
         tmp = *left;
         *left = *right;
         *right = tmp;
         left++;
         right--;
     }
}
 
char *left(char *arr, int num)     
{  
    int len = strlen(arr);  
    exchange(arr, arr + (num - 1));    
    exchange(arr + num, arr + (len - 1));   
    exchange(arr, arr + (len - 1));    
    return arr;  
} 
 
int main()
{
    char arr[] = "abcdef";
    puts(left(arr, 2));
    system("pause");
    return 0;
}

注:对于判断两个字符串中,其中一个字符串为另一个字符串左旋或右旋后的字符串的问题,见下篇博客:

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

时间: 2024-12-26 04:18:47

编写一个函数,可以左旋字符串中k个字符的相关文章

编写一个函数将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 注意:将参数字符串中的字符反向排列,不是反向输出. 代码如下: #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char *str)//求字符串长度 { int count=0; while(*str++) { co

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

请实现一个函数,把字符串中的每个空格替换成“%20”

请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"we are happy.",则输出"we%20are%20happy." #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char arr[] = "we are happy"; int i = 0; int j = 0; int len

【c语言】字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”

// 字符串替换空格:请实现一个函数,把字符串中的每个空格替换成"%20". // 例如输入"we are happy.",则输出"we%20are%20happy." #include <stdio.h> #include <assert.h> char* replace(char* p) { char* ret = p; int num = 0; int oldlen = 0; int newlen = 0; char

【C语言】编写一个函数,求字符串长度

//编写一个函数,求字符串长度 #include <stdio.h> #include <assert.h> int my_strlen(const char *p) { int len=0; assert(p); while (*(p++)) { len++; } return len; } int main() { char *p = "abcdef"; printf("%d\n", my_strlen(p)); return 0; }

替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”

替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”例如输入“we are best ”,则输出we%20are%20 best 此题的实际意义是在网络编程中,如果URL中含有特殊的字符如空格.‘#’等可能导致服务器无法获取正常的参数,我们需要将特殊字符转换成服务器可以识别的字符.准换的规则是“%”加上ASCLL的两位十六制表示,如空格的ASCLL值是32则十六进制为0x20 void replaceBlank(char *src,int length) { int oriLength

面试题5:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 注意从后向前替换,使得时间复杂度为O(n); public class Main { public static void main(String[] args) { Main main01=new Main(); String str=main01.replaceSpace(new StringBuffer("old s

请实现一个函数,把字符串中的每一个空格替换成“%20”,比如输入 “We are Happly。” 则输出“we%20are%20happy。”

请实现一个函数,把字符串中的每一个空格替换成"%20",比如输入 "We are Happly."  则输出"we%20are%20happy. " void ReplaceBlank(char String[],int length) { //originalLength 为字符串string的实际长度 //length字符串的总容量 int originalLength  = 0; int numberOfBlank = 0; int i =

写一个函数,将字符串中空格替换为%20。

写一个函数,将字符串中空格替换为%20.样例:"abc defgx yz"替换为"abc%20defgx%20yz".这道题是一道简单的字符和字符串替换题,字符的替换直接用指针即可,每次都需要把空格后的字符串保存到一个数组中,然后把空格替换为%20后再将刚刚拷贝的字符串拷贝到%20的后面,代码如下: Fun(char str){char p = str;char arr[20];while (p != '\0'){if (p == ' '){strcpy(arr,