?超大分量,放心食用!
1.char数组:
char数组是一种很好的数组实例,可做为低级的string,也可以作为小游戏的像素。
char的赋值方法:
首先,我们要知道char类型的赋值方法:
char a='a';
char的形式为字符,因此赋值时要加上单引号(')。?
char数组的赋值方法:
如果要给char数组赋值,将是这样:
char a[5]={'a','b','c','d','e'};
这样做十分的麻烦,要用上大量的单引号和逗号,其实我们可以把它当作string来使用,直接用双引号来赋值:
char a[5]="abcde";//和上面的代码是一样的
怎么样?是不是快多了?
也可以用之前(https://blog.csdn.net/m0_54672684/article/details/119299417)那样让编译器计算元素个数(不加索引),即
char a[]="abcde";//和上面的代码是一样的
ASCLL码:ASCLL码以斜杠(\)开头,可做字符,也可做键码(键码这东西以后说)。
每个字符都对应一个ASCLL码,如:'A'对应的是/65,空字符则是/0。
因此,我们甚至可以用ASCLL码来代替字符。看!:
int a=65;cout<<(char)a;
首先定义了一个数字变量,当输出时强制转换为char型。因此,从ASCLL码表中查找/65,就是'A'。
因此,这同时也说明了char类型只能是字符('a'),不能是字符串("a"):
| 'S' | "S" | 符号区别: | (')+(') | (")+(") | 类型区别: | 字符常量 | 字符串 | 组成: | (\83) | (\83)+(\0) |
char类函数:需包含<cstring>头文件
1.strcpy():复制? ?需包含2个对象:1.复制的对象 2.复制的内容?
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[20]="anb";
char b[20]="bnb";
cout<<"复制前:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl;
strcpy(a,b);
cout<<"复制后:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl;
}
?
?
2.strcat():附加? ?需包含2个对象:1.被附加的对象 2.附加的内容? ?
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[20]="anb";
char b[20]="bnb";
cout<<"复制前:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl;
strcat(a,b);
cout<<"复制后:"<<endl;
cout<<"a:"<<a<<endl<<"b:"<<b<<endl;
}

?
?2.stirng:
1.要使用string类,要在程序中包含string类。可以使用std命名空间,也可以使用std::string。
你可以把string看成一个智能的char数组。举个例子:
3.对char数组的输入:
1.
cin
:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 使用方法:
cin>>(变量名);
#include<iostream>
using namespace std;
int main()
{
char a[20];
cin>>a;
cout<<a;
}
?
我们如果用cin>>直接赋值,会发现输入的内容只有前一部分,空格后的部分并未输入!
?
cin有一个特性,就是当赋值时遇到了空格(\0),cin就会停止输入!如果我们将代码改改:
char a[20],b[20];
cin>>a>>b;
cout<<a<<endl<<b;

?输入:DW DWAD? ? ? ? ? ? ?a=DW? b=DWAD
此时缓冲区内存在DW DWAD,cin将DW赋值给a,又在缓冲区发现了DWAD,于是又把DWAD赋值给了b。
因此我们不使用cin,因为它存在隐患。
2.cin.etline():使用cin的类成员getline(),使用方法:
cin.getline(a,20);
cin.getline()包含2个参数,第一:char数组名,第二:数组元素数。
该函数最多只能读取(元素数-1)个元素数(就是20-1,19个),余下的空间要储存空字符(\0)。
因此,该语句将实现把输入内容赋值给数组a。
输入:DADA DADA
输出:DADA DADA
3.cin.get():使用cin的类函数get(),使用方法与cin.etline()类似,解释参数的方式也相同。
但是!cin.get()不读取换行符!这意味什么?看!:
#include<iostream>
using namespace std;
int main()
{
char a[20];char b[20];
cout<<"请输入:";
cin.get(a,20);
cin.get(b,20);
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
}

?我们会发现,还没输入b时,就已经跳过了。
?解决办法:再调用一次
cin.get(a,20).get();

cin.getline()与cin.get():
名称: | cin.getline() | cin.get() | 作用: | 对字符数组的输入 | 对字符数组的输入 | 共同点: | 1.都会换行 | 2.都是cin的类函数 | 区别1:优点 | 使用简单 | 检查错误简单 | 区别2:失效位 | 会设置失效位 | 不会设置失效位 |
4.对string的输入:
1.cin:跟上文char数组一样,遇到空格会(\0)停止,就不讲了。
?2.getline():注意,这边时直接使用getline(),而不是以cin的类成员来使用。
使用方法:
1.getline(cin,(string名)):该函数会直接将输入的内容赋值给指定的string(a):
getline(cin,a);
2.getline(cin,(string名),'(某个字符)'):该函数与第一种不同,它会在输入的内容中查找指定的字符,然后在把前面的在赋值,与第一种相比,多了一个范围(指定的字符)。
#include <iostream>
using namespace std;
int main()
{
string a;
getline(cin,a,' ');
cout<<a;
}
该函数会将输入的内容的空格前部分赋值给a。
?个人感觉和cin挺像的,oh,效果应该是一模一样!
5.细讲string:
在前面我们曽讲到string是智能的char数组。那么相比char数组,string智能在哪?
1.内存智能:
名称: | char数组 | string | 内存: | 由索引决定内存 | 无限 |
?
2.使用智能:
虽然string本身就是char数组,但我们可以将string当作简单变量。
因此,我们也可以把char数组赋值给string:
#include <iostream>
using namespace std;
int main()
{
string a;char b[20]="DAW";
a=b;cout<<a;
}
但我们却不能把string赋值给char数组:
我们也可以像使用char数组那样对string使用索引:
#include <iostream>
using namespace std;
int main()
{
string a="oello(你好)";//定义
cout<<a<<endl;//先输出
a[0]='h';cout<<a;//更改第一个字符为‘h’再输出
}

?但要注意的是:更改的必须是字符!原来是字符,更改后还是字符!
#include <iostream>
using namespace std;
int main()
{
string a="oello(你好)";//定义
cout<<a<<endl;//先输出
a[0]='h';cout<<a;//更改第一个字符为‘h’再输出
}
在a中,a[0]为字符('a'),所以才可以更改。?
?但如果更改的是字符串,就会变成随机的字符串:
#include <iostream>
using namespace std;
int main()
{
string a="oello(你好)";
cout<<a<<endl;
a[7]='h';cout<<a;
}
因为a[7]是字符串("好"),因此a[7]的前一个元素a[6]("你")就会随机:
?同时也潜在一个问题!string包含的的内容不只有char型!像上面的oello(你好)一样,你和好就不是char型!如果试图用string索引的方法输出,那么给你的就是一片空白:
#include <iostream>
using namespace std;
int main()
{
string a="oello(你好)";
cout<<a[6]<<endl;
}
真·一片空白:
?string拼接:string类可以对string进行拼接:使用+号:
#include <iostream>
using namespace std;
int main()
{
string a="oello(你好)";
cout<<a<<endl;
a+=" 我不好";
cout<<a;
}

?该程序会先定义一个string,然后在末尾加上"我不好"。
原始字符串(raw):输出什么就是什么,就算是转义序列(\n)在这你也就是"\n"。
?以R为开头,用双引号和括号("()")包住,? 双引号和括号就是定界符。
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
cout<<R"(输出\n)";
}

?温馨提示:DEV C++无法使用raw原始字符串。? ?上面的代码是使用VS(Visual Studio)编译的。
都看到这了,就请您点一个免费的小红心和关注吧!

|