C++基础总结(2)---字符串
来源:互联网 发布:中国出口贸易数据分析 编辑:程序博客网 时间:2024/06/15 06:45
字符串是存储在内存的一系列字符。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输入字符串的时候,容易掉入一个小陷阱。比如下面一段程序:
#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++基础总结(2)---字符串
- c字符串小总结2
- C语言基础总结2
- C语言基础 字符串
- C语言基础 字符串
- C字符串基础
- c/c++字符串分割方法总结2
- C字符串总结
- c字符串函数总结
- C/C++字符串总结
- c 风格字符串总结
- c 风格字符串总结
- C语言字符串总结
- C风格字符串总结
- C/C++ 字符串 总结
- C语言字符串总结
- c字符串函数总结
- 【C语言总结】字符串
- vm下centos网络配置(转)
- PAT-A1058 A+B in Hogwarts (20)(模拟)
- 决策树
- ODBC和JDBC区别
- 常见Oracle HINT的用法
- C++基础总结(2)---字符串
- Java多线程之Executor框架(2)
- Cocos2d-x的坐标系
- noip 2000年 乘积最大 - DP
- HDOJ-1503 Advanced Fruits
- adb 通信协议分析以及实现(一)
- 进程
- 深层神经网络
- 快速排序实现分析