第一周 指针与字符串_慕课笔记

3.字符串操作

1.3.1单字符的输入输出
  • putchar
    • 函数原型:int putchar(int c);
    • 标准输出写一个字符
    • 返回写了几个字符,EOF(-1)表示写失败
  • getchar
    • int getchar(void);
    • 标准输入读一个字符
    • 返回类型是int是为了返回EOF(-1)
      • windows ->Ctrl+Z
      • UNIX ->Ctrl+D

笔记注释

  • EOF:End Of File (文件结束)
  • 键盘(屏幕)<->shell<->程序
    • shell:理解为一个巨大的缓冲区,我们输入的东西都是先缓存在shell中
    • 按下回车时,缓冲区的数据送给程序进行处理(从shell中读取数据进行处理),再通过shell返回给屏幕显示
1.3.2字符串数据
  • char a[ ] [ ]
  • char *a[ ] 指针数组,每个指针指向一个字符串

在这里插入图片描述

  • 程序参数
  • int main(int argc, char const * argv[])
    • argv[0]是命令本身
    • int argc 代表argv数组的大小

用途:正在探索(busybox)

4.字符串函数的实现

#include <string.h>

1.4.1函数strlen
  • strlen

    • size_t strlen(const char *s)
    • 返回s的字符串长度(不包括结尾的0)
  • 实现方法1

    size_t mylen(const char *s)
    {
          
          
    	int cnt = 0;//计数器
        int idx = 0;//下标号
        while(s[idx] != '\0'){
          
          //到尾就停止
            idx++;//遍历数组
            cnt++;
        }
        return cnt;//返回长度不包括结尾的0
    }
    

注释:知循环次数用for;不知循环次数用while定条件

  • 实现方法2

    size_t mylen(const char *s)
    {
          
          
    	int cnt = 0;//计数器
       // int idx = 0;//下标号
        while(s[idx] != '\0'){
          
          //到尾就停止
            idx++;//遍历数组
      //    cnt++;
        }
        return cnt;//返回长度不包括结尾的0
    }
    

注释同样运行方式和结果的代码段可以不要

扫描二维码关注公众号,回复: 12653657 查看本文章
1.4.2函数strcmp
  • int strcmp(const char *s1, onst char *s2)

  • 比较两个字符串,返回:

    • 0:s1 == s2
    • 1:s1 > s2
    • -1: s1< s2

    注释:s1与s2第一个不相同的字符ASCII码的差值(s1-s2)

  • 实现方法1

    int mycmp(const char *s1, onst char *s2)
    {
          
          
        int idx = 0;//下标号
        while (1){
          
          
            if(s1[idx] != s2[idx]){
          
          
            	break;
        	}
       		else if(s1[idx] == '\0'){
          
          
            	break;
        	}
            idx ++}  
        return s1[idx] - s2[idx];
    }
    

注释:退出循环的条件:两者均未结束,判断两者不相等;任意一者结束,直接跳出

  • 实现方法2(数组下标实现遍历)

    int mycmp(const char *s1, onst char *s2)
    {
          
          
        int idx = 0;//数组下标遍历
        while (s1[idx] != s2[idx] && s1[idx] == '\0'){
          
          
            idx ++}  
        return s1[idx] - s2[idx];
    }
    
  • 实现方法3(指针移动实现遍历)

int mycmp(const char *s1, onst char *s2)
{
    
    
    while (*s1 != *s2 && *s1 == '\0'){
    
    
        s1++;s2++}  
    return *s1 - *s2;
}
1.4.3函数strcpy
  • char *strcpy(char *restrict dst, char *restrict src)

    • src 字符串 拷贝到 dst (包括末尾的’\0’)
    • restrict 表明 src 和 dst 不重叠
    • 返回dst
      • 为了能链起代码
  • 复制一个字符串

    	char *dst = (char*)malloc(strlen(src)+1);//加上末尾结束的'\0'
        strcpy(dst,src);
    
  • 实现方法1(数组)

    	char *mycpy(char* dst, char* src) {
          
          
            int idx = 0while (src[idx]) {
          
          
                dst[idx] = src[idx];
                idx++;
            }       
            dst[idx] = '\0';//补上末尾的\0
            return dst;
        }
    
  • 实现方法2(指针)

    	char *mycpy(char* dst, char* src) {
          
          
            char *ret = dst;
        	while (*src) {
          
          
                *drc++ = *src++;
            } 
            return ret;
        }
    
1.4.4字符串搜索函数
  • 字符串中找字符

    用途
  • 如何找第二个字符?

    • 从找到第一个字符的位置+1再开始寻找
      在这里插入图片描述
  • 如何截取某个字符的前面一段字符串

    • 改变改字符的值为’\0’(截断),然后将整段字符串复制到另一个地方即可
    • 原理:
  • 字符串中找字符串
    • char *strstr(const char *s1, const char *s2);
    • char *strcasestr(const char *s1, const char *s2);//忽略大小写

注释

  1. strchr自左往右搜索,strrchr自右向左搜索
  2. 返回指向该字符的指针

猜你喜欢

转载自blog.csdn.net/jimmy33777/article/details/105258410