题目描述
题目链接:获取字符串长度_牛客网
描述
键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。
输入描述:
键盘输入一个字符串
输出描述:
输出字符串的长度
示例1
输入:helloworld
输出:10
示例2
输入:hello world
输出:11
解题分析:
如果用scanf来接收字符串的话,字符串中不能含有空格,否则将以空格作为串的结束符。也就是说,scanf只能接收空格之前的字符串。
思路1:使用输入函数 getc/getchar/fgetc 一个一个的读取,直到读到(最后一个字符)回车换行符’\n’,则停止读取。
注意:使用数组接收字符,读取完后需要在数组最后,再放一个'\0'.
思路2:使用输入函数 fgets 读取一行(包括读取回车换行符\n)。
提示:fgets读取一行,会读取'\n',同时会在字符串的结尾自动添加一个'\0'。而gets也可以读取一行,但是现在淘汰了。
思路3:使用输入函数 scanf 的正则表达式用法。
提示:scanf读取一行,不会读取'\n',但会在字符串的结尾自动添加一个'\0'。
有关scanf的正则表达式用法,详见这一篇文章“你不知道的scanf函数的用法”。
思路4:使用第一个元素的指针与最后一个元素的指针进行相减。
提示:也可以利用"指针-指针"或者"指针遍历计数",自己实现一个my_strlen求字符串长度的函数。
代码实现:
方法1
#include <stdio.h>
int main()
{
char buf[255];
//输入一个字符串
int ch = 0;
int i = 0;
while ((ch = getc(stdin)) != '\n')
{ //while ((ch = fgetc(stdin)) != '\n')
//while ((ch = getchar()) != '\n')
//这里必须是'\n',不能是'\0'
buf[i] = ch;
i++;
}
buf[i] = '\0';//加上\0,字符数组没有结束标志,长度为随机值
int len = 0;
char* p = buf;
while ((*p) != '\0') {
p++;
len++;
}
//输出字符串的长度
printf("%d\n", len);
return 0;
}
方法2
#include <stdio.h>
int main()
{
char buf[255];
//输入一个字符串
char* p = fgets(buf, sizeof(buf), stdin);//会读取\n,同时在字符串的结尾自动添加\0
int len = 0;
while ((*p) != '\n')
{
p++;
len++;
}
//输出字符串的长度
printf("%d\n", len);
return 0;
}
方法3
#include <stdio.h>
int main()
{
char buf[255];
//输入一个字符串
scanf("%[^\n]",buf);//不会读取\n,但会在字符串的结尾自动添加\0
char* p = buf;
int len = 0;
while((*p)!='\0')
{
p++;
len++;
}
//输出字符串的长度
printf("%d\n",len);
return 0;
}
方法4
#include<stdio.h>
int main()
{
char str[255];
scanf("%[^'\n']", str);
//fgets(str,sizeof(str),stdin);
char *start=str;
char *end=str;
while(*end!='\0')//使用fgets,则while(*end!='\n')
{
end++;
}
printf("%d",end-start);
return 0;
}
方法5
#include <stdio.h>
int my_strlen(char* arr)
{
int count = 0;
while (*arr)
{
arr++;
count++;
}
return count;
}
int main()
{
char arr[255] = { 0 };
scanf("%[^'\n']", arr);
printf("%d", my_strlen(arr));
return 0;
}