今天做一道題 ,對memset 函數(shù)的用法 又熟悉了,
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是對字節(jié)進(jìn)行操作,那么他只會對data 前26個字節(jié)進(jìn)行 初始化,而我們知道 int 是4字節(jié)的,呵呵采用下面的就沒有錯誤了
還有就是 scanf 等函數(shù)是帶緩沖區(qū)的 ,而 cin cout 不是 ,所以cin 處理輸入的時候 對于 換行符可以不用考慮。。。
scanf("%d\n",&n);
while (n--)

{
gets(str);
采用 c++ 輸入 在其他相同的條件下,判題結(jié)果顯示,c++需要的內(nèi)存多些 。
//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 之前曾想保存的數(shù)組中,其中以為重復(fù)的字符數(shù)量小于九 就直接保存,后來才發(fā)現(xiàn) 溢出 ,
#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
付翔 閱讀(209)
評論(0) 編輯 收藏 引用