C语言字符数组

二分查找法

int main(void) //二分法查找
{
    int a[] = {1,2,3,7,8,9,4,5,6};
    int len = sizeof(a) / sizeof(a[0]);
    int n = 7;
    int i,j;
    for(i = 1;i < len;++i)//插入法排序
    {
        int t;
        t = a[i];
        j = i;
        while(j > 0 && a[j - 1] > t)
        {
            a[j] = a[j - 1];
            --j;
        }
        a[j] = t;
    }
    for(i = 0;i < len;++i)
    {
        printf("%d\n",a[i]);//先排序,并检验排序结果是否正确
    }
    int begin,end,mid;
    begin = 0;
    end = len -1;
    while(begin <= end)
    {
        mid = (begin + end) / 2;
        if(a[mid] > n)
        {
            end = mid -1;
        }
        else if(a[mid] < n)
        {
            begin = mid + 1;
        }
        else
        {
            break;
        }
    }
    //判断“break”,循环结束的原因(1.找到n,循环结束。2.未找到n,循环结束)
    if(begin <= end)
    {
        printf("found\n");
    }
    else
    {
        printf("not found\n");
    }
    return 0;
}

​

字符数组

1.定义

         字符数组是用来存放字符数据的数组,其定义方式与其他类型数组类似,例如char c[10];

2.初始化

        可以逐个字符赋给数组中各元素,例如char c[10] = {'1','2',......};

        如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。

        如果花括号中提供的初值个数大于数组长度,按语法错误处理;若初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符'\0'

        可以用字符串常量来使字符数组初始化,例如char c[] = "Hello World";,此时数组c的长度会自动定为字符串的长度加1(因为字符串常量的最后由系统加上一个'\0'作为结束标志)。

3.字符串和字符串结束标志

        在C语言中,字符串是作为字符数组来处理的,例如char str[] = "China";,字符串中的字符是逐个存放到数组元素中的。

        为了测定字符串的实际长度,C语言规定了一个字符串结束标志'\0',当遇到字符'\0'时,表示字符串结束。

        系统对字符串常量也自动加一个'\0'作为结束符,例如"C Program"在内存中占10个字节,最后一个字节为'\0'

        字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',但为了便于处理字符串,通常会人为地加上一个'\0'

4.字符数组的输入输出

        可以逐个字符进行输入输出,使用格式符%c,如scanf("%c", &c[i]);printf("%c", c[i]);

        也可以整个字符串进行输入输出,使用格式符%s,但要注意输出时不包括'\0',且输入的字符串长度应小于字符数组的定义长度。

5.字符串处理函数

1.puts函数输出字符串,遇到'\0'结束输出并换行。

int main(void)
{
	char s[100] = "Hello";

    puts(s);
	
	return 0;
}

2.gets函数从终端输入字符串到字符数组,以回车键结束输入。

        get(s):可能会发生越界访问。

        scanf("%s",s) :(回车、空格符、换行)之后程序提前终止。

        fgets(s,sizeof(s)/sizeof(s[0]),stdin):将回车也作为有效字符输入,导致结果出现liang'ge'huan'ha

3.strcat函数连接两个字符串,将第二个字符串接在第一个字符串后面。

int main(void)
{
	char s1[100] = "Hello";
	char s2[100] = "World!";

	strcat(s1, s2);
/*	
	int i = 0;
	while(s1[i])
	{
		++i;
	}
	
	int j = 0;
	while(s2[j])
	{
		s1[i++] = s2[j++];
	}
	s1[i] = 0;
*/
	
	puts(s1);

	return 0;
}

4.strcpy函数复制字符串,strcpy将整个字符串复制

int main(void)
{
	char s1[100] = "Hello World!";
	char s2[100] ;;
	int i = 0;

/*	while(s1[i] != '\0')
	{
		s2[i] = s1[i];
		++i;
	}
	s2[i] = '\0';*/
	strcpy(s2, s1);
	puts(s2);

	return 0;
}

5.strcmp函数比较两个字符串,根据比较结果返回正数、负数或0。

int main(void)
{
	char s1[100] = "World";
	char s2[100] = "Hello";
	char s3[100] = "China";
	char max[100];

	if(strcmp(s1, s2) > 0)
	{
		strcpy(max, s1);
	}
	else
	{
		strcpy(max, s2);
	}

	if(strcmp(max, s3) < 0)
	{
		strcpy(max, s3);
	}
	
	puts(max);

	return 0;
}

6.strlen函数测量字符串的实际长度,不包括'\0'

统计字符串个数

int main(void)
{
    int i = 0;
    char s[100] = "Hello World!";
    printf("%lu\n",strlen(s));
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值