H面试程序(0):字符串一些常用函数的实现

关于程序员面试宝典中5.8节面试例题:编写一个函数,实现把C/C++程序代码中的注释去掉……答案的分析 因为马上要找工作了,所以,没事要看看程序员面试宝典,今天看到第5.8节(P41)程序设计的其他问题,自己思考了一下,然后看了看附带的答案,发现答案都看不太懂(大家都懂看别人的程序,没有注释,会看的很纠结),附带注释不多,看起来很吃力,看不懂,就百度,谷歌一下,看看有没有网友的分析,果然,有人分析过了,找了几篇带有注释的,然后研究下,发现按照注释来看,是明白了一点,但是觉得,有些地方分析的有错误,理 阅读详情

1、Strcat函数原型如下:

char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数
{
       char * address = strDest;             //该语句若放在assert之后,编译出错
       assert((strDest != NULL) && (strScr != NULL)); //对源地址和目的地址加非0断言
       while(*strDest)             //是while(*strDest!=’\0’)的简化形式
       {                        //若使用while(*strDest++),则会出错,因为++是不受循环
              strDest++;               //约束的。所以要在循环体内++;因为要是*strDest最后指
       }                        //向该字符串的结束标志’\0’。
       while(*strDest++ = *strScr++) 
       {
              NULL;                 //该循环条件内可以用++,
       }                          //此处可以加语句*strDest=’\0’;有无必要?
return address;               //为了实现链式操作,将目的地址返回
}


 

2、Strcpy函数原型如下:

char *strcpy(char *strDest, const char *strScr)
{
       char *address=strDest;
       assert((strDest != NULL) && (strScr != NULL));
       while(*strScr)                   //是while(*strScr != ’\0’)的简化形式;
       {
              *strDest++ = *strScr++;
       }
       *strDest = '\0';                       //当strScr字符串长度小于原strDest字符串长度
       return address;                      //时,如果没有改语句,就会出错了。
}


3、Strcmp函数原型如下:

int strcmp (const char *str1,const char *str2)
{           
       int len = 0;
       assert((str1 != '\0') && (str2 != '\0'));
       while(*str1 && *str2 && (*str1 == *str2))
       {
              str1++;
              str2++;
       }
       return *str1-*str2;
}


4、Strlen函数原型如下:

int strlen(const char *str)
{
    int len = 0;
       assert(str != NULL);
       while(*str++)
       {
              len++;
       }
       return len;
}


5、memcpy函数

函数原型:void *memmove(void *dest, const void *source, size_t count)

返回值说明:返回指向dest的void *指针

参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数

函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。

void *memcpy(void *dest, const void *source, size_t count)
{
   assert((NULL != dest) && (NULL != source));
   char *tmp_dest = (char *)dest;
   char *tmp_source = (char *)source;
   while(count --)//不对是否存在重叠区域进行判断
       *tmp_dest ++ = *tmp_source ++;
   return dest;
}


 

6、memmove函数

函数原型:void *memcpy(void *dest, const void *source, size_t count);

返回值说明:返回指向dest的void *指针

函数说明:memcpy功能和memmove相同,但是memcpy中dest和source中的区域不能重叠,否则会出现未知结果。

函数memcpy()   从source  指向的区域向dest指向的区域复制count个字符,如果两数组重叠,不定义该函数的行为。而memmove(),如果两函数重叠,赋值仍正确进行。

memcpy函数假设要复制的内存区域不存在重叠,如果你能确保你进行复制操作的的内存区域没有任何重叠,可以直接用memcpy。 如果你不能保证是否有重叠,为了确保复制的正确性,你必须用memmove。

void *memmove(void *dest, const void *source, size_t count)
{
   assert((NULL != dest) && (NULL != source));
   char *tmp_source, *tmp_dest;
   tmp_source = (char *)source;
   tmp_dest = (char *)dest;
   if((dest + count<source) || (source + count) <dest))
   {// 如果没有重叠区域
       while(count--)
       *tmp_dest++ = *tmp_source++;
   }
  else
  { //如果有重叠,反向拷贝。以避免源字符串被部分目的字符串覆盖
     tmp_source += count - 1;
     tmp_dest += count - 1;
     while(count--)
       *--tmp_dest = *--tmp;
  }
  
  return dest;
}

7.atoi

原型: int atoi(const char *nptr);

函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。

#include <stdio.h>
#include <assert.h>
static int atoi(const char* str)
{
    int result = 0;
    int sign = 0;
    assert(str != NULL);
    // proc whitespace characters
    while (*str==' ' || *str=='\t' || *str=='\n')
        ++str;

    // proc sign character
    if (*str=='-')
    {
        sign = 1;
        ++str;
    }
    else if (*str=='+')
    {
        ++str;
    }

    // proc numbers
    while (*str>='0' && *str<='9')
    {
        result = result*10 + *str - '0';
        ++str;
    }

    // return result
    if (sign==1)
       return -result;
    else
       return result;
}


 

7. itoa

char *itoa( int value, char *string,int radix);

  原型说明:

  value:欲转换的数据。

  string:目标字符串的地址。

  radix:转换后的进制数,可以是10进制、16进制等

char *itoa(int val, char *buf, unsigned radix)
{
    char   *p;             
    char   *firstdig;      
    char   temp;           
    unsigned   digval;     
    p = buf;
    if(val <0)
    {
        *p++ = '-';
        val = (unsigned long)(-(long)val);
    }
    firstdig = p; 
    do{
        digval = (unsigned)(val % radix);
        val /= radix;
       
        if  (digval > 9)
            *p++ = (char)(digval - 10 + 'a'); 
        else
            *p++ = (char)(digval + '0');      
    }while(val > 0);
   
    *p-- = '\0 ';         
    do{
        temp = *p;
        *p = *firstdig;
        *firstdig = temp;
        --p;
        ++firstdig;        
    }while(firstdig < p);  
    return buf;
}


 

 


 

H面试程序(19): 统计出现频率的最高的K的字符串 出处:http://blog.youkuaiyun.com/v_JULY_v 我做了一些详细的注释   //copyright@yansha &&July //July、updated,2011.05.08 //题目描述: //搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的 //长度为1-255字节。假设目前有一千万个记录(这些查询串 阅读详情

相关推荐

森浦资讯(C++ 面试两道程序题)

2015-12-22 星期2  今天去了我的第一个实习公司(森浦资讯)面试,这也是我在学了一整年德语之后,第一次去面试一家软件开发岗位。 其实这次面试我是什么都没有准备,只是凭着自己的以前的记忆去回答一起技术问题。 在这期间面试官给我两道程序题: 1. 写一个回文函数,检测一个字符串是不是回文。 2.写一个atof()函数, 面对这样的两个题目,总感觉以前都是写过的,但是一年多没看程序

Linux学习 1598

c-language: 库函数

1. 字符串函数strcpy:字符串复制 char* strcpy(char* dst,const char* src){ assert(dst!=NULL && src != NULL) char* ret = dest; while((*dst++=*stc++)!='\0') NULL; return ret;} strncpy:字符串按长度复制strnc

LandscapeMi 461

简单面试题::字符串按单词反转

字符串按单词反转 输入格式是:"this is a string" 输出格式是: "string a is this" 要求不能用任何库函数 这个题目看似非常简单,但是用纯C语言且不用任何库函数来写,还是挺考察基础的。 下面给出一个实现,对于单词之间有多个空格的(称之为“缝隙”),每个单词之间的相对缝隙不作改变。 比如I_kill___you输出会是you___kill_I

architect19的专栏 1万+

itoa()其中指定转换的进制

#include char *itoa(int val, char *buf, unsigned radix) {     char   *p;     char   *firstdig;     char   temp;     unsigned   digval;     p = buf;     if(val     {         *p++ = '-';

gate0088的专栏 437

图像配准(Image Registration)——深度学习方法

参考:https://www.cnblogs.com/carsonzhu/p/11188574.html

m0_46483236的博客 4万+

从医疗成像到工业检测:CMOS图像传感器NIR技术的最新应用案例解析

本文深入解析了CMOS图像传感器NIR技术在医疗成像和工业检测中的最新应用案例。通过提升量子效率至70%,NIR技术实现了血管可视化、材料缺陷检测等突破性进展,显著提高了医疗诊断精度和工业质检效率。文章还探讨了系统集成关键考量和前沿发展趋势。

weixin_30879169的博客 90

【面试题分享】重现 string.h 库常用的函数

strrchr是 “string reverse character” 的缩写,全称是 “string reverse character search”。该函数用于在字符串中查找最后一次出现的指定字符,并返回一个指向该字符的指针。与strchr函数类似,如果在字符串str中找到c,则返回一个指向字符串中最后一个出现的字符c的指针;如果没有没有找到,则返回NULL。last = str;str++;上述代码依然使用了while。

Grayson Blog 1277

Python实现安居客新房数据抓取简易版

本文介绍使用Python爬取安居客新房楼盘数据的方法,重点针对三四线城市。通过分析移动端H5页面结构,采用滚动加载方式获取推荐楼盘列表(class="recomm-list"),从中提取楼盘ID并拼接详情页链接。代码展示了如何解析HTML标签获取楼盘名称、状态、价格、户型等基本信息,并处理图片URL。爬取过程涉及一个一级页面和两个二级页面,同时提到可能遇到的验证码问题将在后续处理。核心代码使用BeautifulSoup解析HTML,requests发送请求,并将数据存入MySQL数据库。

qq_37604998的博客 475

[学习] C语言<string.h>中字符串函数全解析

C语言<string.h>字符串函数摘要 本文全面解析C标准库<string.h>中的字符串处理函数,提供函数原型说明和实用示例代码。涵盖19个核心函数:strcpy/strncpy(字符串拷贝)、strcat/strncat(字符串拼接)、strcmp/strncmp(字符串比较)、strlen(获取长度)、strchr/strrchr(字符查找)、strstr(子串查找)、strspn/strcspn(前缀匹配计算)以及strpbrk(字符集查找)。每个函数均配有完整可运行的代码

极客不孤独的博客 1968

在 Windows 10 中通过 WSL2 安装 vLLM 部署本地大模型的方法和步骤

通过 WSL2 在 Windows 10 中部署 vLLM 的核心优势是兼顾 Windows 生态与 Linux 环境的 GPU 加速能力,适合需要在 Windows 下开发但依赖 vLLM 高性能推理的场景。相比原生 Windows 部署(Ollama 等工具),该方案性能更优(接近原生 Ubuntu),且支持更大模型和量化优化。若追求极致性能,建议直接使用 Ubuntu 系统;若必须依赖 Windows 工具链,WSL2 + vLLM 是当前最优选择。

当 AI 开始写文章、绘星空,甚至预测未来,您还在旁观吗?这里将剖开人工智能的思考逻辑,拆解 AI 创作的底层密码,也聊聊人工智能里的人文温度。每篇都有让你拍案的细节,快来解锁 AI 时代的神奇世界! 3756

【保姆级教程】教你如何轻松获取MIMIC数据使用权限

文章非常详细地介绍了MIMIC数据库申请使用的全部步骤。

越努力 越幸运 6600

关于字符串函数的实现

在很多面试及笔试中,都会有字符串的操作,有的甚至不允许使用C函数库中的函数,所使用函数都需要自己编写。那么就有必要针对字符串函数的实现,进行一个讲解。 首先: 将详细讲解在字符串函数实现中常用的语句 *str++ 实际上是先使用*str,再str = str+

www.keything.net 1432

Allegro如何导入芯片的Pin Delay?

Allegro在做等长时,需要导入芯片的Pin Delay才能做真正的等长。因为有些芯片内部的引脚本身就是不等长的,例如海思的部分芯片。在右栏找到芯片U1,然后在Pin Delay栏下找一个PIN脚随便输入一个数值,这一步的目的是导出Pin Delay.csv文件的格式。4、用这份文件的格式,重新编辑需要导入芯片的Pin Delay,然后选择菜单File→Import→Pin delay。2、回到PCB,选择菜单File→Export→Pin delay,导出Pin Delay。

bhxc809751502的博客 5144

c库函数 strring.h字符串操作(部分常用实现)

作为C程序员来说 1.size_t strlen( char const * string);

不喜欢debug的疯子 1469

【ARMv8 异常模型入门及渐进7 - GIC及安全中断介绍】

GIC-v3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。

CodingCos的博客 2116

OpenSpec 完全指南 config.yaml文件

不管是项目内还是全局存放,自定义工作流都要遵守以下规则,否则会导致OpenSpec无法识别,新手一定要记牢:一个文件夹 = 一个工作流:工作流文件夹的名称,就是中schema字段要填写的名称;每个工作流文件夹必须包含:这是工作流的核心定义文件,没有它,OpenSpec无法识别这个工作流;模板文件统一放templates/目录:如果需要自定义生成文件的模板(比如统一的提案模板、任务模板),就放在工作流文件夹下的templates/里,OpenSpec会自动识别;

h a 6 6 6 c k 为 你解决复杂难题! 1424

H面试程序(28):字符串处理转换

//2 字符串处理转换 //问题描述: //在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成, //其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词); //找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列), //然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次; //如果整个输入的字符串

linuxlinuxlinuxlinux的专栏 1347

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

详解字符串函数与内存函数【C语言/进阶】

合理高效地使用函数是一个程序员必不可少的技能,它能简洁高效的实现我们想要的功能。同时,在面试时一些函数的优缺点、原理也是面试官常问的问题。所以C的常用库函数对程序员是十分重要的。

Man9o 2076

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

H面试程序(26):判断字符串是否定回文字符串

所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的。比如"level" 、 “aaabbaaa” 题目:判断一个字符串是否为回文 解法:两端扫描 #include #include int huiwen( int high, int low , char * a) //从两边扫描, num是一个中点位置 { assert(a);

linuxlinuxlinuxlinux的专栏 1152

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C语言:字符函数和字符串函数

如果str2为空字符串,也就是说它内部仅仅只有字符'\0',这时我们说str1实际上是包含str2的,因为str1也是字符串,其内部也含有字符'\0',这时我们只需返回str1的首元素指针即可,这是极为特殊的情况,那么剩下的都是普遍情况。我们将需要拷贝的字符串的字符一个个拷贝到要拷贝到的字符串中,直到拷贝到字符'\0'为止,但是不光要拷贝到字符'\0'为止,我们还要将字符'\0'也一并拷贝进去,如果丢失了字符'\0',我们得到的就不再是字符串了。,即你要从source字符串拷贝的字符的个数。

2302_80177865的博客 1307

【C语言标准库函数】标准输入输出函数详解[2]:字符串输入输出

在C语言中,处理字符串输入输出时,应优先考虑使用fgets和fputs函数,因为它们提供了更好的安全性和灵活性。gets函数由于存在缓冲区溢出的风险,已被废弃,不应在新代码中使用。puts函数虽然简单易用,但在需要精确控制输出格式(如避免自动添加换行符)时,可能不是最佳选择。

byte轻骑兵的技术小窝 6704

H面试程序3:去除字符串中多余的空格

比如“_ _I_ _ _Lu_ _ _  _you_ _ _ _ _ _”变成“I_ Lu_you”       #include #include //50min void RemoveExtraSpace(char* str) { assert(str); int flag = 1; //之前已经遇到空格 int newp = 0; int i

linuxlinuxlinuxlinux的专栏 2151

string.h中一些函数的实现

面试经常会考一些常用函数的实现.尤其是string.h中的函数.准备先!程序都是在gcc下面调试成功。 1 char* strcpy(char *to,const char *from); #include#include#include#include/*函数原型char *strcpy(char *to,const char *from); *功能:

井中月的专栏 1144

用C语言实现将int类型转化为字符串,不使用已有的转换函数

昨天面试腾讯,让用C语言实现将int类型转化为字符串,不使用已有的转换函数。 写代码的过程中出现了许多错误,记录一下,函数原型是面试官给出的。(原型的一些缺陷应该是面试官设的陷阱,我自己太弱都掉进去了。。。) 实现代码如下 #include #include #define INT_MAX 2147483647 #define INT_MIN (-2147483647-1)//必须是这种

ZiZhanOld的博客 7178
上一篇: char str[] 和 char *str的区别
下一篇: 计算机启动的详细过程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值