1、知识点:using声明命名空间。注意的是头文件中不应该包含using声明,因为在引用头文件时,会将头文件中的内容拷贝到文件中来,如果头文件中包含了using声明,那么可能每一个头文件中都会包含using声明,可能会造成名字的冲突。
常加:using namespace std ;(将标准库声明)
2、例题:编写一段程序从标准输入中一次读入一行,然后修改该程序使其一次读入一个词。
知识点:读入一整行和读入一个词主要的差别可以用getline()函数来实现。使用方法:getline(cin , stringname)
(a)一次读入一行的程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring;
while (getline(cin , mystring))
{
cout<<mystring<<endl;
}
}
(b)一次读入一个词的程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring;
while (cin>>mystring)
{
cout<<mystring<<endl;
}
}
3、例题:string类的输入运算符和getline的函数分别是如何处理空白字符的?
解析:(1)对于string类的输入函数,它会自动忽略开头的空白(空格、制表符、换行等等),从第一个真正的字符开始直到下一个空白。(2)对于getline()函数,它会保存字符串中的空白符,它读入数据,直到遇到换行符位置。
4、编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,输出长度较大的那个字符串。
知识点:对于字符串的比较程序:比较的是字符在字典中的顺序 :b>a ,小写字母大于大写字母。长度比较可以用size()函数。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring1 , mystring2;
cin>>mystring1>>mystring2;
if (mystring1 != mystring2)
{
cout<<(mystring1 >= mystring2 ? mystring1 : mystring2)<<endl;
}
}
知识点:字符串长度比较程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring1 , mystring2;
cin>>mystring1>>mystring2;
if (mystring1.size() != mystring2.size())
{
cout<<(mystring1.size() >= mystring2.size() ? mystring1 : mystring2)<<endl;
}
else
{
cout<<"The length of these strings are the same!"<<endl;
}
}
知识点:编写一段程序从标准输入中读入多个字符并将他们连在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。
连接字符串程序:连接字符串直接“+”即可。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring;
string sumstring;
while (getline(cin ,mystring))
{
sumstring += mystring;
cout<<sumstring<<endl;
}
}
分割开来的程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring;
string sumstring;
while (getline(cin ,mystring))
{
sumstring = sumstring+mystring+" ";
cout<<sumstring<<endl;
}
}
5、编写一段程序,使用范围for语句将字符串内的所有字符用X代替。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring("jiangjialei");
int num = mystring.size();
for (int i=0 ; i<num ; i++)
{
mystring[i] = 'X';
}
cout<<mystring;
}
6、将5题中的循环控制变量的类型设为char将发生什么?写出程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring("jiangjialei");
int num = mystring.size();
for (char i=0 ; i<num ; i++)
{
mystring[i] = 'X';
}
cout<<mystring;
}
这里用char的话输出的结果也是正确的,因为每一个元素都是char类型的。
7、用while语句书写6题的程序;
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i = 0;
string mystring("jiangjialei");
int num = mystring.size();
while (i < num)
{
mystring[i] = 'X';
i++;
}
cout << mystring;
}
分析:当我们已经知道循环的次数了,最好还是用for循环比较好。
8、下面程序有何作用?他合法吗?如果不合法为什么?
string s;
cout<<s[0]<<endl;
解析:不合法,因为字符串s是一个空字符串,第一个元素是未知的,引用非法。
9、编写一段程序,读入一个包含符号的字符串,将标点符号去除后输出字符串剩余部分。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mystring("jjl1314wyh#@haha");
int num = mystring.size();
for (int i = 0; i < num; i++)
{
if (!ispunct(mystring[i]))
cout << mystring[i];
}
}
解析:知识点为:主要使用到自带的函数:ispunct()判断字符是否为标点符号。
10、下面的范围for语句合法吗?如果合法,c的类型是什么?
const string s=“Keep out!”;
for(auto &c:s){/* …*/}
解析:for循环体不看后面花括号的内容,肯定是合法的,但是如果在for循环中花括号中给C赋值,修改C的值,那么此时的for语句肯定是不合法的。C的类型是const char& 。