付翔的专栏
在鄙视中成长 记录成长的点滴
posts - 106,  comments - 32,  trackbacks - 0

今天做一道题 ,对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 付翔 阅读(196) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

CSDN - 我的blog地址

博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜