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中存放的字符串末尾无’ ’。
