C 写一个函数使字符串向左移指定个位

10人阅读 评论(0) 收藏 举报
分类:

1.题目

实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

2.程序代码

方法一:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <Windows.h>

void left_move(char arr[7], int num, int sz)//自定义函数,实现题目要求
{
    int i = 0;
    int j = 0;//定义参数,控制循环
    char mid = 0;//定义参数作为中间量

    while (num >= sz)//如果要移动的位数大于等于字符串长度,执行此操作
    {
        if (num > sz)
        {
            num = num % sz;//若大于则对该数模上字符串长度取余
        }
        else
        {
            return 0;//如果相等的话,则字符串本身和移动后的结果相同
        }
    }

    while (j < num)//控制移动的位数
    {
        mid = arr[0];//把第一个元素的值赋给中间量
        i = 0;//每次进到循环都要给i初始化

        while (i < sz - 1)//i不能超过字符串的长度-1
        {
            arr[i] = arr[i + 1];//把后一个元素的内容赋给前一个元素
            i++;
        }

        arr[sz - 1] = mid;

        j++;
    }

    return 0;
}

int main()
{
    char arr[] = "ABCDEF";
    int num = 0;
    int sz = sizeof(arr) / sizeof(arr[0]) - 1;

    printf("please input the number of moves:\n");
    scanf("%d", &num);

    left_move(arr, num, sz);
    printf("%s", arr);

    system("pause");
    return 0;
}

方法二:

#define _CRT_SECURE_NO_WARNINGS 1

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

void change(char *l, char *r)//自定义函数,逆置字符串中的元素
{
    int mid = 0;

    while (l <= r)
    {
        mid = *l;
        *l = *r;
        *r = mid;

        l++;
        r--;
    }
}

void left_move(char arr[], int num)
{
    int len = strlen(arr);//求字符串长度

    change(arr, arr + num - 1);//逆置要左移的元素
    change(arr + num, arr + len - 1);//逆置其余的元素
    change(arr, arr + len - 1);//把分别逆置后的字符串再次逆置
}

int main()
{
    char arr[] = "ABCDEF";
    int num = 0;

    printf("please input the number of move:");
    scanf("%d", &num);

    left_move(arr, num);

    printf("%s", arr);

    system("pause");
    return 0;
}

3.执行结果

这里写图片描述

查看评论

C语言:写一个函数,使输入的一个字符串按反序存放

题目:写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串...
  • u010703975
  • u010703975
  • 2015年04月04日 14:42
  • 7492

【算法】字符串左移函数的O(n)解法

例如,字符串 abcdef ,若要让def翻转到abc的前头,只要按照下述3个步骤操作即可: 首先将原字符串分为两个部分,即X:abc,Y:def; 将X反转,X->X^T,即得:abc->c...
  • a781558066
  • a781558066
  • 2015年04月13日 12:55
  • 667

【C语言】字符串右循环移位

C语言
  • SuLiJuan66
  • SuLiJuan66
  • 2015年06月13日 13:24
  • 1564

8.5 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

8.5 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 #include//8.5 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 void in...
  • qslife
  • qslife
  • 2016年07月30日 22:30
  • 13795

写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串

题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcde...
  • cjhxydream
  • cjhxydream
  • 2017年03月20日 13:07
  • 3563

java字符串左移或右移几位(三次反转思想)

代码public class StringReversal { /** * 反转字符串(循环交换) * 其他字符串反转的方法 * 1、java的api:Strin...
  • zhaozhirongfree1111
  • zhaozhirongfree1111
  • 2017年05月03日 10:23
  • 1633

C语言fputc()函数:写文件函数(将一指定字符写入文件流中)

相关函数:fopen, fwrite, fscanf, putc 头文件:#include 定义函数:int fputc(int c, FILE * stream); 函数说明:fputc 会...
  • Lina_ACM
  • Lina_ACM
  • 2016年07月15日 09:21
  • 951

【c++】字符串循环左移

输入一个字符串和一个非负整数N,要求将字符串循环左移N次。输入格式:输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。输出格式:在一行中输出循环左移NN次后...
  • ww1473345713
  • ww1473345713
  • 2016年03月23日 00:24
  • 1414

c语言练习 10-4. 字符串循环左移(20)

输入一个字符串和一个非负整数N,要求将字符串循环左移N次。 输入格式: 输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。 输出格式: ...
  • huozhiwu0424
  • huozhiwu0424
  • 2014年08月12日 09:24
  • 1103

C++:基础写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。:

#include #include #include using namespace std; int main() {     char a[1000];     int b,d; ...
  • ACM_e
  • ACM_e
  • 2016年10月17日 18:34
  • 5787
    个人资料
    持之以恒
    等级:
    访问量: 756
    积分: 576
    排名: 8万+
    文章分类
    文章存档
    最新评论