学习笔记第八天

1.基本概念

        字符数组:用于存储字符序列的数组。

        字符串:以'\0'(空字符)结尾的字符数组。这是C语言中识别字符串的标准方式。

        字符串常量:如"Hello",是编译器自动在末尾添加'\0'的字符序列。

2.字符数组的定义与初始化

        定义:char arr[size]; 定义了一个能够存储size个字符的数组。

        直接初始化:char arr[] = "Hello"; 编译器自动在数组末尾添加'\0'。

        逐个字符初始化:char arr[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; 明确指定每个字符,包括结尾的'\0'。

        注意:'\0'(空字符)是字符串的结束标志。

3.字符串的输入输出

        输入:

               scanf("%s", arr); 注意:此方法不读取空格,且可能导致缓冲区溢出。

                fgets(arr, sizeof(arr), stdin); 可读取空格和换行符,更安全。

        输出:

                printf("%s\n", arr); 输出字符串后换行。

                puts(arr); 输出字符串后自动添加换行符。、

4.字符串处理函数

        包含头文件:#include <string.h>

        长度:strlen(str) 返回字符串str的长度,不包括结尾的'\0'。

char s[100] = "Hello World!";
int i,counter = 0;
int len = strlen(s);   //获取字符串有效字符的个数
 
for(i = 0;s[i] != 0;++i)
{
    ++counter;       //获取字符串有效字符的个数
}

        复制:strcpy(dest, src) 将src字符串复制到dest中,包括'\0'。

    char s1[100] = "Hello World!";
    char s2[100];
    strcpy(s2,s1);  //将数组s1中的字符串复制到s2中
    int i = 0;
 
 
    while(s1[i])
    {
        s2[i] = s1[i];    //将数组s1中的字符串复制到s2中
        ++i;
    }
    s2[i] = '\0';     //为数组添加结束标志,防止越界

        追加:strcat(dest, src) 将src字符串追加到dest字符串的末尾,包括'\0'。

    char s1[100] = "Hello";
    char s2[100] = "World!";
    
    strcat(s1,s2);   //将数组s1和s2中的字符串拼接在一起
 
    int i = 0;
    int len;
    len = strlen(s1);
 
    while(s2[i])
    {
        s1[len + i] = s2[i];   //将数组s1和s2中的字符串拼接在一起
        ++i;
    }
    s1[len+i] = '\0';    为数组添加结束标志,防止越界

        比较:strcmp(str1, str2) 比较两个字符串,返回整数表示比较结果。

int main(void)
{
    char s1[100] = "Hello";
    char s2[100] = "World!";
    unsigned long a =strlen(s1),b = strlen(s2);
    int i =0,j;
    //printf("%d\n",strcmp(s1,s2));
    while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
    {
        ++i;
    }

    printf("%d\n",s1[i]-s2[i]);
}

        查找字符:strchr(str, ch) 在str中查找字符ch,返回首次出现的地址。

        查找子串:strstr(str, substr) 在str中查找子串substr,返回首次出现的地址。

5.二分法

    int a[] = {1,-2,3,-4,5,-6,7,-8,9,0};
    int len = sizeof(a) / sizeof(a[0]);
    int begin,mid,end;
    begin = 0;
    end = len -1;
    int i,j,t,n;
    printf("请输入需要查找的数:");
    scanf("%d",&n);
 
    for(i = 0;i < len - 1;++i)     //选择排序
    {
        for(j = i + 1;j < len;++j)
        {
            if(a[i] > a[j])
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
 
    for(i = 0;i < len;++i)
    {
        printf("%d,",a[i]);
    }
    printf("\b \n");
 
 
    while(begin <= end)         //二分法查找
    {
        mid = (begin + end) / 2;
 
        if(a[mid] > n)
        {
            end = mid -1;
        }
        else if(a[mid] < n)
        {
            begin = mid +1;
        }
        else
        {
            break;
        }
    }
 
    if(begin <= end)
    {
        printf("找到了a[%d] = %d\n",mid,a[mid]);
    }
    else
    {
        printf("未找到\n");
    }

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值