作业:
- 定义自己的命名空间,其中有string类型的变量,再定义两个函数,一个函数完成字符串的输入,一个函数完成求字符串长度,再定义一个全局函数完成对该字符串的反转
#include <iostream>
#include <cstring>
using namespace std;
namespace A{
void fun1(string s1);
}
void A::fun1(string s1){
cout<<s1<<endl;
}
void fun2(char arr[],int len){
for(int i=0;i<len/2;i++){
int temp;
temp=arr[i];
arr[i]=arr[len-i-1];
arr[len-i-1]=temp;
}
for(int i=0;i<len;i++){
cout<<arr[i];
}
}
using namespace A;
int main()
{
string s1="";
cout<<"请输入字符串"<<endl;
cin>>s1;
fun1(s1);
char arr[32]="";
strcpy(arr,s1.data());
int len=s1.size();
fun2(arr,len);
return 0;
}
一、第一个C++程序
1.cout输出流对象
cout控制格式输出,只能输出十六进制、八进制和十进制
//输出a的16进制
cout << "a的十六进制:" << hex << a << endl;
cout << setbase(16) << a << endl; //输出十六进制
cout << "右对齐四个宽度输出a: " << dec << setw(4) << a << endl;
cout << "左对齐四个宽度输出a: " << setw(4) << left << a << endl;
cout << "b指定小数点后4位输出" << setprecision(4) << b << endl; //4位包含小数点
2.cin输入流对象
//使用cin输入三个变量
cin >> a;
cin >> c;
cin >> b;
二、命名空间
命名空间只能定义全局处/其他命名空间中
1.在命名空间中声明函数
#include <iostream>
using namespace std;
namespace A
{
int a=100;
void fun(); //在命名空间A中存放了函数声明
}
//命名空间中声明,命名空间外定义
//需要加上命名空间名和域限定符限定是哪一个命名空间中的函数
void A::fun()
{
cout << "test" << endl;
}
int main()
{
std::cout << A::a << endl;
A::fun(); //test
return 0;
}
2.命名空间冲突的解决
如果导入了命名空间中和全局变量冲突的标识符时,后续访问该标识符会报错
访问命名空间中的标识符: 命名空间名::标识符名
访问全局变量: ::标识符名; (全局变量,默认在程序的匿名空间中)
三、string字符串
c++中将字符串封装乘string类,后续可以用string定义字符串变量
1.string类
#include <iostream>
using namespace std;
int main()
{
string s1 = "hello"; //定义了一个字符串s1并赋值为hello
cout << "s1=" << s1 << endl;
string s2(3,'a'); //定义了一个字符串s2并使用3个a初始化
cout << "s2=" << s2 << endl;
string s3(s1); //定义了一个字符串s3使用s1初始化
cout << "s3=" << s3 << endl;
string s4("hi"); //定义了一个字符串s4使用hi初始化
cout << "s4=" << s4 << endl;
cout << "s1+s2 = " << s1+s2 << endl; //将s1和s2拼接到一起
s4 = s1+s2;
cout << "s4 = " << s4;
return 0;
}
2. c字符串与c++字符串的转化
#include <iostream>
#include <cstring>
using namespace std;
//需要使用c_str函数和data函数玩长城C++风格向C风格的转换
int main()
{
string s1 = "hello"; //定义了一个字符串s1并赋值为hello
char str[100];
strcpy(str,s1.c_str());
cout << str << endl;
string s2 = " world";
strcat(str,s2.data());
cout << str << endl;
string s3 = str; //C风格字符串可以直接给string类型赋值
cout << s3 << endl;
cout << (s3>s2) << endl;
//string类型可以直接进行比较无需调用strcmp函数,运算符重载
return 0;
}
3.string类中的函数
1.at()
cout<<s1.at(100)<<endl;
2.size()/length()
s1.size()
s1.length()
3.empty()/clear()
s1.empty:对字符串判空
s1.clear:清空字符串
4.字符串的判断
可以直接使用!=,==,>,>=····运算符直接判断字符串间的关系
四、bool类型
- bool类型的默认值,0/false
- bool的大小,1Byte(内存分配的最小单位是Byte)
- bool类型的赋值,可以直接使用true和false赋值,可以用数值直接赋值
- bool输出,默认以数字形式输出,如果想用单词形式输出,需要加上boolalpha,恢复数字形式,加上noboolalpha