1、字符串的拼接
字符串有时候很长,无法放到一行中,c++允许拼接字符串字面值,两个用引号括起来的字符串合并为一个,两个由空白(空格,制表符和换行符)分隔的字符串常量都将自动拼接成一个。
如:
1. #include<iostream> 2. using namespace std; 3. int main() 4. { 5. 6. cout << "i love you" << endl; 7. cout << "i love " "you" << endl; 8. cout << "i love " 9. "you" << endl; 10. 11. system("pause"); 12. return 0; 13. }
当然了,拼接的时候空格是不会在字符串中出现的。
该程序运行结果如下:
2、字符串的存储
在数组中使用字符串,常用2种方法。一是将数组初始化为字符串常量,二是将键盘或文件输入读入到数组中。同时,用strlen()函数来确定字符串的长度。其标准头文件为cstring (老式为string.h)。有人可能会说到sizeof,这里sizeof是整个数组的长度,但是strlen()则返回的是数组中字符串的长度并不是数组的长度。注意一点是,strlen()函数只计算可见的字符,也就是说不把空字符计算在内。
1. #include<iostream> 2. #include<cstring> 3. using namespace std; 4. int main() 5. { 6. const int Size = 15; 7. char name1[Size]; 8. char name2[Size] = "ACE"; 9. cout << "My name is " << name2 << ".And your name?" << endl; 10. cin >> name1; 11. cout << "My name is " << name1 << endl; 12. cout << "wow,your name has " << strlen(name1) << " letters.\n"; 13. cout << "the size of name1 is " << sizeof(name1) << " bytes.\n"; 14. 15. 16. system("pause"); 17. return 0; 18. }
该程序体现了这些点。
程序结果:
3、字符串的输入
首先对于常用的cin输入在这里有一点小小的毛病,那就是cin是使用空白(空格,制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词。那么该怎么避免这些错误呢?这就需要下面的方法来解决了!
即面向行的输入:一种是getline()和get(),下面介绍这两种方式
(1)getline()函数读取整行,使用回车键输入的换行符来确定输入的结尾,使用时的格式为cin.getline()。函数中有两个参数,第一个用来存储输入行的数组名,第二个参数是要读取的字符数。这里要注意一点就是如果参数是20,那么它最多读取19个字符,最后一个空间要用来存储自动在结尾添加的空字符。
如:cin.getline(name,20);
1. #include<iostream> 2. #include<cstring> 3. using namespace std; 4. int main() 5. { 6. const int Size = 20; 7. char name[Size]; 8. char sport[Size]; 9. cout << "What's your name?\n"; 10. cin.getline(name, Size); 11. cout << "My name is "<<name<<".\n"; 12. cout << "What's your favorite sport?\n"; 13. cin.getline(sport, Size); 14. cout << "I like "<<sport<<" best.\n"; 15. system("pause"); 16. return 0; 17. }
程序运行结果:
getline()函数每次读取一行,通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,用空字符来替换换行符。
即如下图所示意的过程:
(2)面向行的输入:get()
get()函数是cin输入流对象的成员函数
该函数有几种变体,其中一种与getline()函数类似,但get()不再读取并丢弃换行符,而是将其留在输入队列中,下面调用两次该函数解释一下:
1. cin.get(name,Size); 2. cin.get(sport,Size);//会出现问题
怎么说呢,第一个字符串输入后末尾的换行符将留在队列中,等到第二次调用时,看到的第一个字符便是换行符,它会认为到达行尾,所以不会发现可读取的内容。
但是,依然可以借助一些手段解决这个问题:
get()函数的另一种变体,cin.get()(不含参数)可以用来处理换行符(当然其他的也可以)为读取下一行做准备工作。
如:
1. cin.get(name,Size);//read first line 2. cin.get(); //read new line 3. cin.get(sport,Size);//read second line
get()函数还有一种用途是将两个类成员函数拼接起来,如下所示:
cin.get(name,Size).get();
简单来说就是相当于这两步:
1. 2. cin.get(name,Size);//read first line 3. cin.get(); //read new line
另外,getline()也有类似用法:
cin.getline(name1,Arsize).getline(name2,Arsize);
下面用一个详细的程序来进行说明:
1. #include <iostream> 2. using namespace std; 3. int main() 4. { 5. const int Arsize = 20; 6. char name[Arsize]; 7. char sport[Arsize]; 8. cout << "Enter your name: \n"; 9. cin.get(name, Arsize).get(); 10. cout << "Enter your favorite sport: \n"; 11. cin.get(sport, Arsize).get(); 12. cout << "I am " << name << " ,and I like " << sport << " best.\n"; 13. 14. return 0; 15. }
该程序的运行结果如下:
4、混合输入字符串和数字
这个内容基本在于前面内容的理解这边放两个例子,看看能不能理解一下
首先看原始代码:
1. #include <iostream> 2. using namespace std; 3. int main() 4. { 5. 6. const int Size = 10; 7. cout << "How old are you?" << endl; 8. int age; 9. cin >> age; 10. cout << "What's your name?\n"; 11. char name[Size]; 12. cin.getline(name, Size); 13. cout << "Your age :" << age << endl; 14. cout << "Your name :" << name << endl; 15. 16. return 0; 17. }
该程序会出现错误。为什么呢?因为在输入数字的时候,回车键也就是换行符会留存下来,在进行字符数组的输入的时候最先读到换行符,函数将直接结束无法读取name数组,导致用户没有输入名字的机会,所以要在输入名字前做一些改动,具体有以下两种做法:
(1)
1. cin >> age; 2. cin.get();//or cin.get(ch);
(2)
(cin >> age).get();//or (cin >> age).get(ch);
内容有不对的地方希望大家指正,大家一起进步,加油噢!
好嘞,以上就是今天所要学习的内容,希望对c++刚刚入门的大兄弟,小姐姐们有所帮助,我是小白,小白给你不一样的内容!