字符(char)(串)(string)

在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类型,所以可以正常运行。

好了,今天就到这里,我们下次再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值