码迷,mamicode.com
首页 > 其他好文 > 详细

字符串

时间:2020-07-24 09:34:24      阅读:73      评论:0      收藏:0      [点我收藏+]

标签: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()函数

  • getline()通过回车键(Enter)输入的换行符来确定结尾。调用方式:cin.getline(arrayName,arraySize)
char name[10];
cout << "Enter your name: ";
cin.getline(name,10);	//其中,10个元素包含空字符\0,故最多输入9个字符
  • get()与getline()的调用方式类似,但get()不再读取并丢失换行符,而是将其保留在输入队列中。故两次使用时,会导致第二次读取的第一个字符时换行符,而没有任何可读取的内容。
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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!