| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1475 人关注过本帖, 3 人收藏
标题:华为面试题
只看楼主 加入收藏
zjs0388
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2011-9-7
收藏
得分:0 
/*
 *  Created on: 2011-9-8
 *      Author: zhujianshe
 */
#include<stdio.h>
#include<stdlib.h>

void
take_num(const char *strIn,int *n, unsigned *outArray)
{
    char ch;
    *n = 0;
    int index = 0;
    while((ch = *(strIn+index++)) !='\0')
    {

        if(ch >='0'&&ch<='9')
        {
            int temp = 0;
            temp +=ch-'0';
            while((ch = *(strIn+index++)) !='\0'&&ch >='0'&&ch<='9')
            {
                temp *=10;
                temp+=ch-'0';

            }
            outArray[(*n)++] = temp;

        }
    }
}

int
delete_sub_str(const char *str, const char *sub_str, char *result_str)
{
    int count =0;
    int str_index = 0,sub_str_index = 0,result_index =0;
    char ch;
    int isequal = 1;
    while((ch = *(str+str_index++))!='\0')
    {
        /*判断是否跟sub_str 的第一个字符相同,如果相同就依次比较,不相同就把结果烤到result_str.
         * tmp_index 记录第一个字符相同的位置,在以后比较的过程中发现从此处开始的字符串与子串不相同时
         * 下一次从此处开始。在子串比较的过程中设置了一个标志符,如果不相同就从tmp_index出开始继续比较,
         * 如果相同就把count 加1,并把偏移量设置为tmp_index,
         */
        if(ch == *sub_str)
        {
            sub_str_index = 1;
            int tmp_index = str_index;

            while((*(str+tmp_index))!='\0'&&*(sub_str+sub_str_index)!='\0')
            {
                if((*(str+tmp_index++)) != *(sub_str+sub_str_index++))
                {
                    isequal =0;
                    break;
                }
            }
            if(!isequal)
            {
                *(result_str+result_index++) = ch;
            }else
            {
                str_index = tmp_index;
                count ++;
            }

        }else
        {
            *(result_str+result_index++) = ch;
        }

    }
    *(result_str+result_index) = '\0';
    return count;
}

int
main(void)
{
    char * strIn = "ab00cd+123fght456-25 3.005fgh";
    int * n = malloc(sizeof(int));
    unsigned  outArray[10];
    take_num(strIn,n,outArray);
    for(int i = 0;i<*n;i++)
    {
        printf("%d\t",outArray[i]);
    }
    printf("counts:    %d\n",*n);
    free(n);

    char * str = "abcde123abcd123";
    char *sub_str = "123";
    char * result_str = malloc(sizeof(char)*100    );
    int count = 0;
    count = delete_sub_str(str,sub_str,result_str);
    printf("str=%s\n sub_str=%s\n result_str=%s\n count=%d\n",str,sub_str,result_str,count);

    sub_str = "1234";
    count = delete_sub_str(str,sub_str,result_str);
    printf("str=%s\n sub_str=%s\n result_str=%s\n count=%d\n",str,sub_str,result_str,count);
    free(result_str);

    return EXIT_SUCCESS;
}
2011-09-08 11:31
mhbao
Rank: 2
等 级:论坛游民
帖 子:10
专家分:23
注 册:2011-9-8
收藏
得分:0 
4楼的代码中:if(0 == temp) temp += *p-48;
可以简化为:if(0 == temp) temp = *p-48;

2011-09-08 12:28
woai_kmust
Rank: 2
等 级:论坛游民
帖 子:29
专家分:41
注 册:2011-8-31
收藏
得分:0 
佩服,4楼
2011-09-08 16:14
zjs0388
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2011-9-7
收藏
得分:0 
四楼的好像有个bug.如果:
char * strIn = "ab00cd+123fght456-25 3.005fgh92";
最后的“92” 不能统计出来。
 
2011-09-08 20:39
wubaogang
Rank: 2
等 级:论坛游民
帖 子:8
专家分:11
注 册:2011-9-8
收藏
得分:0 
linux 环境  初学者请多指教
main.c
-----------------------------------------------------------------

#include<stdio.h>
 #include"hw.h"
  
 int main(){
  
     char str[100]="";
     int i=0,j=0;
     unsigned int out[20]={0};
  
     printf("strIn=");
 
     gets(str);
     i=sizeof(str);
 
     take_num(str,&i,out);
  
     printf("outArry={")
   
     for(j=0;j<i;j++)
     printf("%d,",out[j]);
     printf("}\n");
     printf("n=%d\n",i);
 
         return 0;
 
  }


hw.c
------------------------------------------------------------------
 #include<stdio.h>
 #include"hw.h"
  
 void take_num(const char *strIn, int *n,unsigned int *out){
  
      int i=0,j=0,m,o=0,l,sum=1;
  
      while(strIn[i]!='\0'){
  
           switch(strIn[i]){
 
                  case '0':
                  case '1':
                  case '2':
                  case '3':
                  case '4':
                  case '5':
                  case '6':
                  case '7':
                  case '8':
                         j++;
                         break;
                  default :
                          if(j>0){
                            for(m=0;m<j;m++){
  
                               for(l=0;l<m;l++)
                                  sum*=10;
                               out[o]+=(strIn[i-1-m]-48)*sum      ;
  
                             }
                            o++;
                            j=0;
                            m=0;
                            l=0;
                            sum=1;
                            }
                          break;
  
            }
 
            i++;

 
  
       }
  
       *n=o;
 
  }

hw.h
------------------------------------------------------------------
  #ifndef _HW_H_
  #define _HW_H_
  
  void take_num(const char *, int *,unsigned int *);
  
  #endif

[ 本帖最后由 wubaogang 于 2011-9-9 08:14 编辑 ]
2011-09-09 08:08
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
都是高手,我连题目还看不懂咧

我是初学者
2011-09-09 15:45
快速回复:华为面试题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019177 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved