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

xiaoxiao2021-02-28  49

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

转载请注明原文地址: https://www.6miu.com/read-44913.html

最新回复(0)