zzulioj1161字符串长度(指针专题)

1161: 字符串长度(指针专题)

题目描述 编写一函数len,求一个字符串的长度,注意该长度不计空格。要求用字符指针实现。在主函数中输入字符串,调用该len函数后输出其长度。 int len(char *sp) { //实现sp所指串的长度,不计空格。 }

输入 输入一个字符串,以回车结束,长度不超过100。

输出 输出一个整数,单独占一行。

样例输入 What day is today? 样例输出 15

代码展示

#include<stdio.h>
#include<string.h>
int len(char *sp);   //计算字符串长度并返回一个整数
int main()
{
          
   
	char sp[100];
	gets(sp);   //输入字符串
	printf("%d
",len(sp));
	return 0;	
} 

int len(char *sp)
{
          
   
	int i,a=0;
	for(i=0;sp[i]!=;i++)
	{
          
   
		if(sp[i]!= )   //因为不计算空格
			a++;
	}
	return a;
}

说明 函数内的循环也可以写成下列形式:

while(*sp!=)
	{
          
   
		if(*sp!= )
			a++;
		sp++;
	}

注意 在输入字符串的时候如果使用scanf函数输入,那么结果将是错误的,因为scanf的读取原理是匹配字符,当scanf从缓冲区读取数据时遇到空格和回车键则认为读取完毕,即要是输入"A B"则读取的只有A,

解决方法

使用gets(buf),但编译时系统可能会报警告,说它不安全因为gets()不能指定数据的长度,故可使用fgets()

使用fgets(buf,20,stdin), gets()函数在读入字符串时,在读到换行符时会将换行符转换成空字符,也就是转换成字符串结束标志存储,但fgets()不会替换换行符,它会将换行符也作为字符串的一部分读到字符串中来

使用scanf("%[^ ]",buf), [^ ]的意思是scanf遇到 才停止读取,需注意使用此种方式后,buf中存放的字符串末尾无’ ’。

经验分享 程序员 微信小程序 职场和发展