【C语言】 左旋字符串

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

方法一:开辟另一个数组,先把第k+1后面的字符写入这个数组中,再把要左旋的k个字符写进去

实现如下:

#include<stdio.h>
#include<assert.h>
#include<string.h>

void left_Relvove(char *str,char *arr,int k)
{
	char *pcur = str+k;     //先让指针从第k+1个字符开始,存进arr数组里
    assert (str && arr);        //断言
	while(*pcur)            //从第k+1个字符开始,遇到‘\0‘跳出
	{
		*arr++ = *pcur++;   

	}
	pcur = str;  //把第k+1后面的字符写到arr中后,把指针调向str首元素,开始写入要旋转的k个字符
	while(k)
	{
		*arr++ = *pcur++;
		k--;
	}
	*arr=‘\0‘;
}

int main()
{
    int k;
    char str[10] = {0};
    char arr[10] = {0};
    scanf("%d", &k);
	scanf("%s",str);
    left_Relvove(str,arr,k);
    printf("%s\n",arr);
    return 0;
}

方法二:定义一个字符串翻转函数,把要左旋的k个字符先逆序翻转,再把k+1后的字符
逆序翻转,最后把整个字符串逆序翻转

实现如下:

#include<stdio.h>
#include <string.h>

void reserve(char *left,char*right) 
{
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main()
{
    char arr[10] = "AABCD"; 
    int len = strlen(arr)-1;
    int k = 0;
    char *pstart = &arr[0];
    char *pend = arr+len;
    scanf("%d", &k);
    reserve(pstart, pstart + k -1); //把要左旋的k个字符先逆序翻转
    reserve(pstart + k, pend);      //把k+1后的字符逆序翻转
    reserve(pstart, pend);          //整个字符串逆序翻转
    printf("%s\n", arr);
    system("pause");
    return 0;
}
时间: 2024-10-13 12:14:43

【C语言】 左旋字符串的相关文章

C语言--左旋字符串中的K个字符

问题: 3.实现一个函数,可以左旋字符串中的k个字符. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA #include<stdio.h> #include<assert.h> #include<string.h> void reserve(char* str, int len) { assert(str); char* start = str; char* end = str + len - 1; while (start < end

C语言--&gt;&gt;左旋字符串

问题描述: 假设有字符串:                    ABCDE 左旋一个字符得到新字符串   BCDEA 左旋两个字符得到新字符串   CDEAB 代码实现: #include <stdio.h> #include <string.h> void reverse(char *left,char *right) {  while(left<right)  {   char tmp=*left;   *left=*right;   *right=tmp;   lef

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

C语言中字符串如何转换为二进制、八进制、十进制、十六进制

在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, strtod, strtoul表头文件: #include <stdlib.h>定义函数: long int strtol(const char *nptr, char **endptr, int base):函数的解释说明 这个函数会将参数nptr字符串根据参数base来转换成长整型数.参数base

iOS开发入门 ? C语言(字符串、字符串数组、命令行参数)

字符串 1. 概念 用双引号引起来的就是字符串 "a string" //C语言编译器会将两个并列的字符串自动拼接成一个字符串 "a string""another a string" // \是换行连接的标记(一行不够写) "a looooooooooong \ string" 常见ASCII编码: 'A' == 65    'a' == 97    '0' == 48    '\0' == 0 int a[10]; //表

C语言之字符串处理函数

C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为puts(字符串组) 作用:将一个字符串输出到终端.如,char一个string,并赋予初值.调用puts(string);进行字符串的输出. 2.gets函数——输入字符串的函数 一般的形式:gets(字符数组) 作用:从终端输入一个字符串到字符数组,并且得到一个函数值成为字符数组的起始地址. ge

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

实现一个函数,可以左旋字符串中的k个字符. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA #include<stdio.h>  #include<stdlib.h>  void spin(char arr[],int num) //spin函数用以完成旋转字符的功能  {  char arr1[5] = {0};  char *str = arr; //创建两个指针都指向原字符数组的首地址  char *start = arr;  char *mov 

D语言中字符串的操作

字符串的操作在软件开发中是特别重要的一个事情,因为基本上的编程都会使用到字符串,字符串操作的好坏决定着一个语言的好与差.在我做过的一个项目中曾经就出现过字符串操作性能问题. D语言字符串有 string,wstring,dstring三种类型,在D语言中字符串是使用字符数组定义的,三种类型分别对应char,wchar,dchar.char只有一个字节,wchar为双字节,dchar为三字节.对字符串的操作也相当于是对数组的操作,这跟其它语言不一样,C++中字符串是以string类来进行封装,它的

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

题目: 实现一个函数,可以左旋字符串中的k个字符. 例如: abcdef左旋一个字符得到bcdefa abcdef左旋两个字符得到cdefab 题目分析: 对于这个问题,可以用很多种方法求解,这里介绍两种方法: 算法一: 左旋字符串的k个字符,我们可以先将剩下的n-k个字符移动最前面,然后将左旋的k个字符移动到字符串的最后面的位置,这就完成了字符串左旋k个字符的功能.其中,对于n-k个字符的移动,可以利用while循环,将后面的字符逐一进行拷贝.下面是具体的程序: #define _CRT_SE