学习记录第八天

字符数组:

定义与初始化
字符数组可以通过指定数组大小来定义,也可以在定义时初始化。

char str[10]; // 定义一个可以存储9个字符的字符串,第10位用于存储终止符'\0'
char str[] = "Hello"; // 直接初始化,数组大小自动根据字符串长度确定

存储字符串
字符数组用于存储字符串时,字符串的末尾会自动添加一个空字符'\0',这在C语言中表示字符串的结束。例如,如果一个字符串是"hello",在内存中它实际上是'h', 'e', 'l', 'l', 'o', '\0'。

访问与修改
字符数组的元素可以通过下标访问和修改,就像访问普通数组元素一样。

char str[] = "hello";
str[0] = 'H'; // 修改字符串的第一个字符为'H'

字符串输入输出
输出:字符串可以用printf(),puts()进行输出 

char s[6] = "Hello";
int i;
for(i = 0;i < 6;++i)
{
    printf("%c",s[i]);
}
printf("\b \n");     //使用printf()进行输出


puts(s);    //使用puts()进行输出,s为数组名,代表数组首元素的地址

  输入:可以用scanf(),gets(),fgets()输入字符串

char s[100];

scanf("%c",s);  //s为数组名,代表数组首元素地址,不需要取地址符&

gets(s);  //无法根据数组大小进行数据的输入,易造成数组越界

fgets(s,100,stdin);  //可以根据数组大小进行数据的输入,不会造成数组越界,但会将'\n'一起输入

字符串操作函数
C语言标准库提供了丰富的字符串操作函数,如strlen(), strcpy(), strcat(), strcmp()等,这些函数可以用于获取字符串长度、复制字符串、拼接字符串以及比较字符串等操作。

        strlen()函数:获取数组的有效字符的个数即'\0'之前字符的个数

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

for(i = 0;s[i] != 0;++i)
{
    ++counter;       //获取字符串有效字符的个数
}

        strcpy()函数:将数组s1中的字符串复制到数组s2中

    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()函数://将数组s1和s2中的字符串拼接在一起

    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()函数:对字符型数组的大小进行比较

    char s1[100] = "Horld!";
    char s2[100] = "Aorld!";
 
    int a;
    a = strcmp(s1,s2);  //比较s1和s2的大小,s1大输出正数,s2大输出负数,相等输出0

    int i = 0;
    while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
    {
        ++i;
    }
    
    i = s1[i] - s2[i];   //比较s1和s2的大小,s1大输出正数,s2大输出负数,相等输出0

二分法查找:

二分查找算法,通常用于在一个有序数组中查找特定元素。二分查找的基本思想是将数组分成两半,比较中间元素与目标值的大小,根据比较结果决定是继续在左半部分查找还是右半部分查找,直到找到目标值或者查找范围为空。

    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");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值