地址
http://acm.hdu.edu.cn/showproblem.php?pid=1020
定位
水题
字符串处理
分析
- 将重复字符编码成
nX
的形式,一遍循环即可。
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int T;
int n,i;
char str[10000];
scanf("%d",&T);
getchar();
while(T--)
{
memset(str,0,sizeof(str));
gets(str);
n = 1;
i = 1;
while(str[i] != '\0')
{
if(str[i] == str[i-1])
{
n++;
}
else
{
if(n != 1)
{
printf("%d",n);
}
printf("%c",str[i-1]);
n = 1;
}
i++;
}
if(n != 1)
{
printf("%d",n);
}
printf("%c",str[i-1]);
n = 1;
printf("\n");
}
}
性能
Exe.Time | Exe.Memory | Code Length | Language |
---|---|---|---|
0MS | 1420K | 782B | c |
总结
判断字符串结尾
c语言中,不论是用scanf("%s",&str)
读取一个字符串还是用gets(str)
读取一行,都不能直接获知字符串的规模。因存在越界访问的风险,c11标准中弃用或标记过时了部分库函数。
目前OJ多采用c99标准,允许使用这些函数。
然而,这些函数处理效率很高,小心使用就可以规避风险。c语言会在字符串的结尾自动添加\0
,以标记结束。在处理字符串时,可以通过比较\0
判断字符串结尾。
应保证字符串变量(字符数组/字符指针)的存储空间足够,否则不会自动添加
\0
。
Thanks everyone