C++基础总结(2)---字符串
2016-03-01 22:51
281 查看
字符串是存储在内存的一系列字符。C++处理字符串有两种方式
第一种来自C语言,即字符数组。
第二种来是基于string类库的方法。
C风格的字符串具有一种特殊的性质:以空字符结尾(空字符表示为'\0'),其ASCII码值为0,用来标记字符产结尾。
例如一下两个例子:
char a[5]={'a','b','c','d','\0'};//a string
char b[5]={'a','b','c','d','e'};//not a string
注意:在确定字符串存储所需的最短数组是,注意别忘了将结尾'\0'计算在内。
char a[9];
cout<<sizeof(a);
其中sizeof(a)测试的是整个数组的长度,即9*sizeof(a[0]);
在使用cin输入字符串的时候,容易掉入一个小陷阱。比如下面一段程序:
下面是程序的运行截图
还没来得及输入甜点,就已经被认为输入结束。因为不能通过键盘输入空字符('\0'),因此cin使用别的方法(空格,制表符,换行符)来确定字符串结束的位置,这就意味着cin在获取字符串数组的时候之获取了前面的一个单词。而将空格后面的单词通过第二个cin。
解决方方法有两种面向行的输入。
第一种:调用cin.getline(arrayname,length);两个参数分别是字符数组的名称和要输入的长度。当按下enter之后最后的换行符将会被装空字符替换。
第二种:调用cin.get(arrayname,length),参数和前面的意思是一样的。区别在于get不在读取并且丢弃换行符。
cin.get(name,ArSize);
cin.get(dessert.ArSize);
由于第一次调用之后换行符留在了队列当中。当第二次调用的时候读取的是换行符,会认为该字符串已经输入结束。
正确的使用方法:
cin.get(name.ArSize);
cin.get(dessert,ArSize);
混合输入字符串和数字的时候
原因和上面的一样,输入数字之后的换行符被getline读到了。解决办法,在getline前面加上一个cin,get()
string类和字符数字大体相似。但是string用起来更加安全和方便。其主要区别是课件string对象声明成简单变量而不是数组
string str;
string str2="panhter";
类的设计可让程序自动处理string'的大小。string的声明创建一个长度为0的string。当输入读到string时将自动调节string的长度.
第一种来自C语言,即字符数组。
第二种来是基于string类库的方法。
C风格的字符串具有一种特殊的性质:以空字符结尾(空字符表示为'\0'),其ASCII码值为0,用来标记字符产结尾。
例如一下两个例子:
char a[5]={'a','b','c','d','\0'};//a string
char b[5]={'a','b','c','d','e'};//not a string
注意:在确定字符串存储所需的最短数组是,注意别忘了将结尾'\0'计算在内。
char a[9];
cout<<sizeof(a);
其中sizeof(a)测试的是整个数组的长度,即9*sizeof(a[0]);
在使用cin输入字符串的时候,容易掉入一个小陷阱。比如下面一段程序:
#include <iostream> using namespace std; int main() { const int arSize=20; char name[arSize]; char dessert[arSize]; cout<<"Enter your name:"<<endl; cin>>name; cout<<"Enter your favorite food"<<endl; cin>>dessert; cout<<"I have some delicious "<<dessert; cout<<" for you, "<<name<<endl; return 0; }
下面是程序的运行截图
还没来得及输入甜点,就已经被认为输入结束。因为不能通过键盘输入空字符('\0'),因此cin使用别的方法(空格,制表符,换行符)来确定字符串结束的位置,这就意味着cin在获取字符串数组的时候之获取了前面的一个单词。而将空格后面的单词通过第二个cin。
解决方方法有两种面向行的输入。
第一种:调用cin.getline(arrayname,length);两个参数分别是字符数组的名称和要输入的长度。当按下enter之后最后的换行符将会被装空字符替换。
第二种:调用cin.get(arrayname,length),参数和前面的意思是一样的。区别在于get不在读取并且丢弃换行符。
cin.get(name,ArSize);
cin.get(dessert.ArSize);
由于第一次调用之后换行符留在了队列当中。当第二次调用的时候读取的是换行符,会认为该字符串已经输入结束。
正确的使用方法:
cin.get(name.ArSize);
cin.get(dessert,ArSize);
混合输入字符串和数字的时候
#include <iostream> using namespace std; int main() { cout<<"What year is your hourse built?"<<endl; int year; cin>>year; cout<<"What is its street address?\n"; char address[80]; cin.get(); cin.getline(address,80); cout<<"Year built:"<<year<<endl; cout<<"Address"<<address<<endl; cout<<"Done"<<endl; return 0; }运行结果
原因和上面的一样,输入数字之后的换行符被getline读到了。解决办法,在getline前面加上一个cin,get()
string类和字符数字大体相似。但是string用起来更加安全和方便。其主要区别是课件string对象声明成简单变量而不是数组
string str;
string str2="panhter";
类的设计可让程序自动处理string'的大小。string的声明创建一个长度为0的string。当输入读到string时将自动调节string的长度.
相关文章推荐
- [C语言][LeetCode][283]Move Zeroes
- 杨鑫的C++上机报告
- VS2012 c++动态定义二维数组及释放
- C++工作现在需求怎么样,如何应对
- C++工作现在需求怎么样,如何应对
- C语言中的多文件执行
- C++利用函数调用实现数组数据的输入输出
- 《C语言程序设计(第二版新版)》第二章习题解答(部分)
- C++智能指针简单剖析
- bzoj 3657 斐波那契数列(fib.cpp/pas/c/in/out)
- c++ 动态内存
- 第1章 C++和STL速成
- c语言笔记
- C++中随机函数rand()和srand()的用法
- Effective C++ 07:为多态基类声明virtual析构函数
- 1>XxxDlg.obj : error LNK2005: "char * * tabPageData" (?tabPageData@@3PAPADA) 已经在 XxxDlg.obj 中定义
- Function Run Fun(北大2015上机考试)
- [c++]继承的经典例子
- 《C语言程序设计(第二版新版)》第一章习题解答(部分)
- 【C/C++学院】0906-递归转栈/二叉树实现