二,字符串

1题目描述

现在,我们将会给你一个字符串,字符串只包含'A'-'Z',你的任务是用下面的方法对它编码:

1.一个长度为K且连续的子串,如果子串中所有的字符都为同一个字符,那么这个子串应当用“KX”(X为子串中的字符)代替;

2.如果K=1,则应当忽略1;

输入

第一行包含一个整数N(1 <= N <= 100),表示测试用例的数目。下一个N行包含N个字符串。每个字符串由“A”—“Z”组成,长度小于10000。

输出

对于每个测试用例,将编码的字符串输出到一行中。

样例输入

2

ABC

ABBCCC

样例输出

ABC

A2B3C

#include<stdio.h>
#include<string.h>
int main()
{
    int N,i=0,j=0,f=0;
    scanf("%d",&N);
    char string[10000];
    for(i=0;i<N;i++)
    {
        scanf("%s",string);
        j=0;
        while(string[j]!='\0')
        {
            f=j;/*从首字符开始*/
            while(string[f+1]==string[j]) f++;/*后一个字符和前一个字符相等,则考察第三个字符,以此类推直到碰到不相同字符*/
            if(f>j)printf("%d",f-j+1);/*如果有相同字符则输出k*/
            printf("%c",string[j]);/*统一输出字符*/
            j=f;/*首字符指向这一次计数的末尾*/
            j++;/*首字符指向下一个异字符,开始第二次计数*/
        }
        printf("\n");
    }
    
    return 0;
}

2将一个字符串循环左移i个位置

题目描述

将一个字符串循环左移i个位置。

输入

第一行:一个字符串

第二行:整数i

输出

字符串的循环左移i位的结果

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j=0,k=0,u;
    char string[1000000],flag;
    scanf("%s",string);
    scanf("%d",&i);
    u=strlen(string);
    
    for(j=0;j<i;j++)
    {
        flag=string[0];
        for(k=0;k<u-1;k++)
        {
            string[k]=string[k+1];
        }
        string[k]=flag;
        k=0;
    }
    
    printf("%s",string);
    return 0;
}

#include <stdio.h>
int main(void){
    char ch[101];
    gets(ch); //读入字符串
    
    int N;
    scanf("%d",&N); //读入移动次数
    
    char *p = ch,first;
    while(N > 0){
        first = ch[0]; //记录首位字符
        while(*(p+1) != '\0'){
            *p = *(p+1);
            p++;
        }
        *p = first; //注意:此时的*p就是*(p+1),即最后一位
        p = ch; //p指回首位字符
        N--;
    }
    puts(ch);
    return 0;
}

3,字符串倒序

#include <string.h>
#include<stdio.h>
int main()
{
    char c[200],c1;
    int i,j,k;
    gets(c);
    k=strlen(c);
    for(i=0,j=k-1;i<(k/2);i++,j--)
    {  c1=c[i];c[i]=c[j];c[j]=c1;}
    puts(c);
    return 0;
}

  1. 删除字符串中元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值