在C++中,一共有两种比较重要的类型,分别是数字变量和字符变量,数字变量指int,long long等,而字符变量指char,string等,那么char和string是什么呢?
1.char
char指的是字符串自带定义类型,它可以转化为int类型,也就是ASCII码,这里我找到了一个比较齐全的ASCII表,可以参考以下:史上最全ASCII码对照表0-255(%d)_yueyueniaolzp的博客-CSDN博客
同理,如果你安装了能支持中文的ANSI,也可以利用char类型。
2.string
string的作用更厉害,它可以满足char语句的所有使用,类似于char的指针类型(char*)。
与char不同,string偏重于串,而一个char变量(数组长度为1)只能存1个字符。
比如:
#include<bits/stdc++.h>
using namespace std;
char arr;
string str;
int main()
{
cout << sizeof(arr) << " " << sizeof(str);
return 0;
}
输出结果为1和32。
由此可得一个string类型的字符串的内存是比较大的。
3.关于它们的函数
1.char的函数
char的函数库主要在<cstdlib>库中,也有在<cstdio>中的,比如gets,puts,我们先讲用处比较多的函数
1.gets,puts(在<cstdio>库)
模版:
char *__cdecl gets(char *_Buffer) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
int __cdecl puts(const char *_Str);
这两个函数是用来字符串输入输出的,当你定义并输入str时,它会原原本本输出str。
2.cin.getline
模版:
__istream_type&
getline(char_type* __s, streamsize __n)
{ return this->getline(__s, __n, this->widen('\n')); }
这个函数是用来带空格输入,比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str[13];
cin.getline(str,13);
cout << str;
return 0;
}
输入Hello World!,输出Hello World!
3.strlen
模版:
size_t __cdecl strlen(const char *_Str);
这个函数是用来记录该字符串的长度的,比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str[] = "Hello World!";
cout << strlen(str);
}
输出12(包括空格和特殊字符)
4.strcat
模版:
char * __cdecl strcat(char * __restrict__ _Dest,const char * __restrict__ _Source);
这个函数是用来连接两个字符串的,比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str1[] = "Hello ",str2[] = "World!";
strcat(str1,str2);
cout << str1;
return 0;
}
输出Hello World!
5.strcpy
模版:
char * __cdecl strcpy(char * __restrict__ _Dest,const char * __restrict__ _Source);
这个函数是用来复制另一个字符串的,比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str1[] = "Hello World!",str2[13];
strcpy(str2,str1);
cout << str2;
return 0;
}
输出Hello World!
6.strcmp
模版:
int __cdecl strcmp(const char *_Str1,const char *_Str2);
这个函数是用来比较两个字符串ASCII码大小的,有三种情况:
if(a > b)return 1;
if(a == b)return 0;
if(a < b)return -1;
比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str1[] = "Hello ",str2[] = "World!";
cout << strcmp(str1,str2);
return 0;
}
输出-1,说明str1 < str2的ASCII码值
7.memset
模版:
void * __cdecl memset(void *_Dst,int _Val,size_t _Size);
这个函数是用来替换一个字符串从下标从0到_Size的字符替换成_Val,比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str[] = "Hello World!";
memset(str,'0',5);
cout << str;
return 0;
}
输出00000 World!
2.string的函数
其实char类型函数能干的事,string类型大部分可以用运算符来解决,比如:
a = a + b;//连接字符串
a = b//复制字符串
if(a==b) if(a>b) if(a<b)//比较字符串
当然也有,比如:
1.size,length
模版:
size_type
size() const _GLIBCXX_NOEXCEPT
{ return _M_string_length; }
size_type
length() const _GLIBCXX_NOEXCEPT
{ return _M_string_length; }
这两个函数是用来检测字符串长度的,比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string str = "Hello World!";
cout << str.size() << " " << str.length();
return 0;
}
输出12 12
2.getline
模版:
template<>
basic_istream<char>&
basic_istream<char>::
getline(char_type* __s, streamsize __n, char_type __delim);
这个函数是用来带空格输入,比如:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string str;
getline(cin,str);
cout << str;
return 0;
}
输入Hello World!,输出Hello World!
3.c_str
模版:
const _CharT*
c_str() const _GLIBCXX_NOEXCEPT
{ return _M_data(); }
这个函数是用来将string类型转化为char类型,以用来使用一些括号里使用char类型的函数,比如:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
string str = "pause";
system(str.c_str());
return 0;
}
这个时候,它会执行cmd中的pause指令,但是system的模版如下:
int __cdecl system(const char *_Command);
里面很清楚是const char *类型,但是为什么运行通过,原来是c_str函数把string类型转化为char类型,所以可以正常运行。
好了,今天就到这里,我们下次再见!