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;
}
删除字符串中元素