【C/C++】sizeof()、strlen()、get()、getline()

1、sizeof()与strlen()

关于数组初始化的简单举例:

  1. 只有在定义数组的时候才可以初始化
  2. 不能将一个数组赋给另一个数组,但是可以用下表分别给数组中的每一个元素赋值,如: arr[i] = num;
int cards[4]·{3,6,8,10}; // okay
int hand[4]; // okay
hand[4]={5,6.7,9}; //not allowed
hand = cards; //not allowed

//只要显式地将第一个元素初始化为0,然后让编译器将其他元素都初始化为0;
//如果初始化为1)而不是{0},则第一个元素被设置为1.其他元素都被设置为0
long totals[500] = {0};  

//如果方括号[]为空时,则C++会计算元素个数,如下:
short things[] = {1,3,5,7} //则此时的数据大小为4

确定存储字符串所需的最短数组时,别忘了将结尾的空字符串计算在内

"S" = 'S' + '\0'

sizeof运算符指出整个数组的长度,但==strlen()==函数返回的是存储在数组中的字符串长度,而不是数组本身的长度。

const int Arsize = 15;
char name2[Arsize] = "C++OWboy";
//通过设置符号常量的地址即可对数组长度进行修改
name2[3] = '\0';

strlen()对于未被初始化的数据, 第一个空字符的出现位置是随机的,因此您在运行该程序时,得到的数据长度很可能与此不同

get()与getline()的区别

两者都能读取一行输入,知道到达换行符,但是getline()将丢弃换行符,而get()会将换行符保留在输入序列中

面向行的输入:getline()

getline是istream类的一个类方法

getline()函数每次读取一行。它通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,它用空字符来替换换行符。

#include <istream>
//设要使用gtline(()将姓名读入到一个包含20个元素的nme数组中
//第一个参数是目标数组;第二个参数数组长度
cin.getling(name,20); 

面向行的输入:get()

get()会读取换行符(所输入的[enter]需要一个get()消化);用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符),因此可以用它来处理换行符,为读取下一行输入做好准备。

C++ primer  plus 第六版 第四章

如何消化换行符

#include <iostream>
#include <string>
using namespace std;

int main(int argc,const char* argv[]) {

	char charr[20];
	string str;
	int year;
	cout << "请输入年份:";
	cin >> year;
	cout << "获取char字符串:";
	cin.getline(charr, 20);
	cout << "获取string字符串:";
	getline(cin, str);
	cout << "第一次输入为:" << charr << "\t" << "第二次输入为:" << str;


	return 0;
}

在这里插入图片描述

运行上述代码可以发现:在输入1997以及回车确定之后,第一个字符串,也就是代码中的cin.getline(charr,20)将回车键吸收并保留,导致第一次getline()直接被调用。所以可以使用get()函数吸收1997之后的换行符;

//以下两种方式均可以
//---1---
cin >> year;
cin.get();

//---2---在这里插入图片描述

(cin>>yeat).get();

在添加上述语句之后:便可以正常输入charrstr两个字符串。

在这里插入图片描述
如有不对的地方,请大家多多指教~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值