今天做一道题 ,对memset 函数的用法 又熟悉了,
http://baike.baidu.com/view/982208.htm?fr=ala0_1_1 这里有memset 的用法
中途要用到 初始化 我定义了 int data【26】;
//memset(data,0,26);
memset(data,0,26*sizeof(int));
//for (i = 0;i < 26; i++)
// data[i] = 0;
第一条语句 不是安全的用法 ,memset是对字节进行操作,那么他只会对data 前26个字节进行 初始化,而我们知道 int 是4字节的,呵呵采用下面的就没有错误了
还有就是 scanf 等函数是带缓冲区的 ,而 cin cout 不是 ,所以cin 处理输入的时候 对于 换行符可以不用考虑。。。
scanf("%d\n",&n);
while (n--)
{
gets(str);
采用 c++ 输入 在其他相同的条件下,判题结果显示,c++需要的内存多些 。
//scanf("%d",&n);
cin>>n;
while (n--)
{
//gets(str);
cin>>str;
//memset(data,0,26);
memset(data,0,26*sizeof(int));
贴出题目
http://acm.hdu.edu.cn/showproblem.php?pid=1020 之前曾想保存的数组中,其中以为重复的字符数量小于九 就直接保存,后来才发现 溢出 ,
#include<iostream>
using namespace std;
int main()
{
//freopen("myout.txt","w",stdout);
char str[10010];
char str1[10010],c;
int data[26];
int n,i,len,num,j =0;
scanf("%d",&n);
while (n--)
{
scanf("%s",str);
getchar();
len = strlen(str);
for (num=0,j = 0,i = 0;i < len ; i ++)
{
c = str[i];
num = 0;
if(str[i] == str[i+1])
{
//while(str[i]!=c)
while(str[i]==c)
num ++,i++;
if(num == 1)
str1[j++] = c;
else
str1[j++] = num+'0',str1[j++] = c;
i--;
}
else
str1[j++] = c;
}
str1[j] = '\0';
printf("%s\n",str1);
}
}
posted on 2010-04-15 18:22
付翔 阅读(201)
评论(0) 编辑 收藏 引用