VoucherVoucher09-20 13:05

编写实现字符串处理函数----strlen函数

C语言拿起又放下,没有毅力的我每次都是学到指针这就放弃了。这次为了增强QA的职业技能,在学习LoadRunner前决心再将这块骨头啃一次!想以写博客的形式来记录知识点。


在做小甲鱼老师的习题中,做到了这样的题目:实现字符串处理函数strlen

题目比较简单:

#define MAX 1024     //定义常量
int main()
{
	char str[MAX];   //定义一个字符串数组
	char *target;    //定义一个指针变量
	target = str;    //将指针变量指向字符串的首元素
	int length = 0;  //定义一个长度变量,并赋值0
	printf("请输入一个字符串:");
	fgets(str, MAX, stdin);   //fgets代替scanf函数输入字符串
	while (*target++ != '\0') {
		length++;         //长度自增
	}
	printf("您总共输入了%d个字符\n", length - 1);
    return 0;
}



这里要来整理下知识点,算是给自己做个笔记加深印象:
关于指针自增自减,谭老的书里是这样介绍的:*target++,*和++同优先级,结合方向自右向左,等价于*(target++)。由于这是个后缀的自增运算符,所以自增的效果要在下一条语句才生效,因此这里取出来的依然是target地址自增前指向的数组元素的值。

然后需要优化下代码,让程序能够计算中文汉字的个数
首先要知道汉字的字节数
#include <stdio.h>

int main()
{
        char str[] = "中";
        int length, i;

        length = sizeof(str) / sizeof(str[0]); // sizeof(str)是数组总共的字节数,sizeof(str[0])是数组首元素占的字节数,相除就是数组长度
        printf("length of str: %d\n", length); 

        for (i = 0; i < length; i++)
        {
                printf("str[%d] = %d\n", i, str[i]);
        }

        return 0;
}

发现中文字符在系统中占用3个字节,并且都为负数。

#define MAX 1024     //定义常量
int main()
{
	char str[MAX];   //定义一个字符串数组
	char *target;    //定义一个指针变量
	char ch;         //定义一个字符变量
	target = str;    //将指针变量指向字符串的首元素
	int length = 0;  //定义一个长度变量,并赋值0
	printf("请输入一个字符串:");
	fgets(str, MAX, stdin);   //fgets代替scanf函数输入字符串
	while (1) {
		ch = *target++;   //将字符串首元素赋值给字符变量ch
		if (ch == '\0')   //判断当ch为'\0'的时候结束循环
		{
			break;
		}
		if ((int)ch < 0)  //一个汉字是3个字节,强制将ch转换为整型,并当ch的整型数值小于0时,为中文字符,指针变量target向后移动2个位子
		{
			target += 2;
		}
		length++;         //长度自增
	}
	printf("您总共输入了%d个字符\n", length - 1);
    return 0;
}


程序之家二维码

000
评论