###题目描述 给定一行长度不超过 100 的非空字符串,请你求出它的具体长度。
输入格式
输入一行,表示一个字符串。注意字符串中可能包含空格。
输出格式
输出一个整数,表示它的长度。
输入样例:
I love Beijing.
输出样例:
15
自写C++代码
#include<iostream>
using namespace std;
int main()
{
string str;
getline(cin,str);
cout<<str.length();
return 0;
}
算法1
C语言代码
#include<string.h>
#include<stdio.h>
int main()
{
char s[105];
gets(s);
printf("%d",strlen(s));
return 0;
}
算法2
C++ 代码(常用)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string a;
getline(cin,a);
cout<<a.size()<<endl;
return 0;
}
算法3
C++ 代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[105];
cin.get(a,105);//需要注意cin.get()不会把换行符取出删除,影响下一次读入!
cout<<strlen(a)<<endl;
return 0;
}
算法4
C++ 代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[105];
cin.getline(a,105);//需要注意cin.getline()会把换行符取出删除,不影响下一次读入!
cout<<strlen(a)<<endl;
return 0;
}
顺带一提 cin 和 scanf读入字符串时遇到空格就停止了。
注意此处读入的代码
- 按整行读到string ,推荐用 getline(cin, string)
- 按整行读到char[] ,推荐用 cin.getline(cin, char*)
- 读单个字符串,推荐用 cin>>
解释如下:
按行读 getline(cin, string) 和 cin.getline(cin, char*) 会读到回车为止,并且会把回车丢弃。 cin.get(cin, char*) 不丢弃回车
其他: fgets 会多读入一个回车,比较麻烦
读字符串 cin >> char* 会自动忽略起始的空格/回车/tab,结尾如果有回车空格,不会丢弃。 ” aa” => “aa” scanf("%s", char*) 同上 cin >> string 同上
C++ length()、size()、sizeof()三者的区别
一、length()函数
c++中,length()只是用来获取字符串的长度。
例如:string str = “asdfghjkl”
则,str.length() = 9。
二、size()函数
c++中,在获取字符串长度时,size()函数与length()函数作用相同。
除此之外,size()函数还可以获取vector类型的长度。
例如:vector < int> num(15,2)
则,num.size() = 15。
例如:string str = "d1da";
则, cout<<str.size();
三、sizeof()运算符
sizeof()运算符用来求对象所占内存空间的大小。
char c[] = "asdsds";
char* cc = c;
char cn[40] = "asdsds";
int a[] = {1,2,3,4,5,6};
int* aa = a;
cout << sizeof(c) << sizeof(cc) << sizeof(cc) << sizeof(cn);
cout << sizeof(a) << sizeof(aa) << sizeof( aa);结果输出:
sizeof(c) = 7 //c是数组,计算到'\0'位置,结果为6 * 1+1=7
sizeof(cc) = 8 //cc为指针类型,大小为8
sizeof(*cc) = 1 //*cc指向c的第一个字符,大小为1
sizeof(cn) = 40 //开辟40个char空间,大小为40 * 1=40
sizeof(a) = 24 //a是数组,但不需计算到'\0',结果为6 * 4=24
sizeof(aa) = 8 //aa为指针类型,大小为8
sizeof(*aa) = 4 //*aa指向a的第一个数字,大小为4
需要注意的是,如果不使用Vector作为数组进行参数传递,那么在传递数组引用是需要再传递一个数组的大小,否则在函数中无法根据首地址计算出数组大小。
四、CPP、java、python获取数组长度的方法
1、CPP
- 获取字符数组的大小(只能用于获取字符数组长度)
#include
cout<<strlen(a);
注意:获取字符数组长度时,使用strlen(a)和下面将要介绍的sizeof(a) / sizeof(a[0]) 得到的结果略有差别,sizeof(a) / sizeof(a[0]) 会把char数组的'\0'
也算入在内。所以得到的大小会比strlen得到的大一。例如:
char a [] = "dadada";
cout<<sizeof(a) / sizeof(a[0]); //结果为7
cout<<strlen(a); //结果为6
- 万能方法
sizeof(a) / sizeof(a[0]) 或者 sizeof(a) / sizeof(* a)
2、Java
注意,java获取数组长度时,length并不是一个方法
a.length
3、Python
len(a)