C++字符串的常见问题和相关操作

目录

#字符串常量的拼接的两种方法

#在数组中使用字符串的两种方法

#将数组初始化为字符串常量

#将键盘或者文件输入读入到数组中

#strlen()函数的使用

#字符串的输入

#字符串输入的问题

#面向行的输入getline()

#面向行的输入get()

#混合输入字符串和数字


#字符串常量的拼接的两种方法

有时候字符串太长,无法放到一行中。C++允许拼接字符串字面值,即用两个用引号括起来的字符串合并成一个。通俗点讲就是任何两个由空白(空格,换行符,制表符)分隔的字符串常量都将自动拼接成一个

cout << "I'd give my right arm to be"" a great violinist.\n";
cout << "I'd give my right ar"
		"m to be a great violinist.\n";

#在数组中使用字符串的两种方法

#将数组初始化为字符串常量

char name2[size] = "C++";

#将键盘或者文件输入读入到数组中

char name1[size];
cin >> name1;

#strlen()函数的使用

使用前应用头文件include<cstring>提供字符串函数的声明

#include<iostream>
#include<cstring>//用strlen()函数
int main()
{
	using namespace std;
	const int size = 15;
	char name1[size];
	char name2[size] = "C++";
	cout << "Howdy!I'm " << name2;
	cout << "!What's your name?\n";
	cin >> name1;
	cout << "Well," << name1 << ",your name has ";
	cout << strlen(name1) << " letters and is stored\n";
	cout << "in an array of " << sizeof(name1) << " bytes.\n";
	cout << "Your initial is " << name1[0] << ".\n";
	name2[3] = '\0';
	cout << "Here are the first 3 character of my name:";
	cout << name2 << endl;
	return 0;
}

上面程序需注意的是,sizeof和strlen函数的不同,sizeof运算符指出整个数组的长度,但是strlen函数返回的是数组中字符串的长度,而不是数组本身的长度

#字符串的输入

#字符串输入的问题

当我们使用cin输入字符串中的时候,cin使用空白来确定字符串的结束位置,当一个字符串有空格时,下一个单词会留在输入表列中,当使用下一个cin时,发现的是上面cin遗留下来的单词,并把它放置到下一个数组中去,就导致下一个字符串没地方输入。

#面向行的输入getline()

getline()函数读取整行,通过回车键输入的换行符来确定输入结尾。要调用的话我们使用cin.getline(数组名称,要读取的字符数)

cin.getline(name, Arsize);

getline使用过后会丢弃换行符

#面向行的输入get()

get()和getline不一样,get不再读取并丢弃换行符,而是将其留在输入队列里。如果连续调用get,第一次调用后,换行符留在输入队列,因此第二次看到调用看到的第一字符就是换行符,get就认为已经到达行尾,而没有发现任何可读取的内容。

解决办法:

法一:

    cin.get(name, Arsize);
	cin.get();
	cin.get(dessert, Arsize);

法二:

    cin.get(name, Arsize).get();
	cin.get(dessert, Arsize);

#混合输入字符串和数字

当我们先输入了一个整数时,由上面我们可以知道,输入cin后,会有一个回车键在输入队列中,后面调用cin.getline的时候读到的第一个字符是换行符,这样getline会以为这行结束了,并将一个空字符串赋给下一个数组。

解决办法:

cin>>year;
cin.get();
(cin>>year).get();

这样就可以解决回车的问题喽!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值