标签:har 串处理 cio getline 数组 空格 读取 ESS eps
字符串是存储在内存的连续字节中的一系列字符。(C++有两字符串处理方式:C-style string和string类)
将数组初识化为字符串有两种方式:
//第一种方法:
//C-style string以空字符结尾(null character),被写作\0,ASCII码为0,不以空字符结尾的不是字符串
char dog[5] = {‘b‘,‘e‘,‘u‘,‘a‘,‘e‘}; //没有以空字符‘\0‘结尾,不是字符串
char cat[5] = {‘b‘,‘e‘,‘u‘,‘a‘,‘\0‘}; // 是字符串
//第二种方法:
char bird[11] = "Mr. Cheeps";
//其中,11个元素包含空字符,若arraySize大于元素数目,则其余未输入字符算作空字符‘\0‘
常用第二种方法来将数组初始化为字符串。字符串常量用双引号,字符常量用单引号,不能互换。
char shirt_size = ‘S‘; //指将S的ASCII值83赋给shirt_size
//"S"不是字符常量,是字符串常量,表示两个字符(字符S和\0)
char shirt_size = "S" //这是错误的表达方式
当字符串很长时,可以将两个引号括起的字符串合并成一个。
//下面两个语句时等效的,且第一个字符串中的空字符\0,会被第二个字符串的第一个字符取代
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";
两次输入字符串产生的问题:
#include <iostream>
int main()
{
using namespace std;
const int ArSize = 20;
char name[ArSize];
cahr dessert[ArSize];
cout << "Enter your name:\n";
cin >> name;
cout << "Enter your favorite dessert:\n";
cin >> dessert;
cout << "I have some delicious " << dessert;
cout << " for you, " << name << ".\n";
return 0;
}
//运行结果为:
Enter your name:
Alistair Dreeb
Enter your favorite dessert:
I have some delicious Dreeb for you, Alistair.
上述代码中,在第一次cin >> name
后,程序便显示结果,并立即显示最后一行。这是因为,cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,所以cin在获取字符串数组时只读取一个单词并自动在结尾添加空字符。第二次cin >> dessert
时,程序发现输入的第二个单词Dreeb,便读取了它。
解决方法: 使用getline()或get()函数
cin.getline(arrayName,arraySize)
char name[10];
cout << "Enter your name: ";
cin.getline(name,10); //其中,10个元素包含空字符\0,故最多输入9个字符
cin.get(name,ArSize); //第一次读取正常
cin.get(dessert,ArSize); //第二次读取错误,无可读取内容
//可通过下述方法解决
cin.get(name,ArSize);
cin.get();
cin.get(dessert,ArSize);
或者
cin.get(name,ArSize).get(); //即有多次cin输入时,在结尾继续调用一个get()
cin.get(dessert,ArSize);
输入数字和字符串产生的问题:
#include <iostream>
int main()
{
using namespace std;
cout << "What year was your house built?\n";
int year;
cin >> year;
cout << "What is its street address?\n";
chat address[80];
cin.getline(address,80);
cout << "Year built: " << year << endl;
cout << "Address: " << address << endl;
cout << "Done!\n";
return 0;
}
//运行结果
What year was your house built?
1966
What is its street address?
Year built: 1966
Adress
Done!
上述代码中,地址(address)根本没输入机会,程序便运行完了。这是因为,cin读取年份时,将回车键生成的换行符留在了输入队列。故后面的cin.get(address,80)
首先读取到换行符。
解决方法:
cin >> year;
cin.get();
或者
(cin >> year).get();
标签:har 串处理 cio getline 数组 空格 读取 ESS eps
原文地址:https://www.cnblogs.com/bubcs/p/13369643.html