-
1.字符串区别
C语言
C中没有字符串,而是使用字符数组保存字符串。C中的字符串是一个以null(‘\0’)字符结尾的字符数组;
//字符串的初始化,定义时可以使用‘=’;以后不能用‘=’赋值
char a[11] = "Cyuyan";
//字符串的赋值,通过"string"文件定义的字符串处理函数
strcpy(a,"python")
//获取字符串的长度,不包括'\0'在内
int len=strlen(a);
printf("%s",a);
C中可以使用字符指针访问一个字符串,通过字符指针存放字符串数组的首元素地址进行访问;
//字符指针
char *a = "hihi";
printf("%s",a)
C常用字符串函数
//字符串初始化
char s1[]="I am a student";
char s2[20]="teacher";
char s3[]="student";
int result;
char s4[20],*p;
//串长度
//int strlen(char *str)
cout<<strlen(s1)<<endl; //输出14
cout<<strlen(s2)<<endl; //输出7
//串拷贝
//char *strcpy(char *str1,char *str2)
strcpy(s4,s2); //s4为"teacher"
//串连接
//char *strcat(char *str1,char*str2)
strcat(s2,s3); //s2为"teacherstudent"
//注意:如果使用字符数组存放字符串,strcat函数并不检查第一个数组是否能够容纳第二个字符串,这样多出来的字符串就会溢出到相邻的存储单元而出现问题。
//串比较
//int strcmp(char *str1,char *str) //比较的是对应字符的ASCII码值,如果str1>str2,返回1
result=strcmp(s2,s3); //result>0
result=strcmp(s2,s2); //result=0
result=strcmp(s3,s2); //result<0
//串定位
//char *strchr(char *str,char ch)
p=strchr(s1,'s'); //找到返回字符在字串中的位置,否则返回-1
strcpy(p,s2); //s1为"I am a teacher"
//在一个串中查找是否存在和另一个串相等的子串
//截取子串形成一个新串
C字符串的输入
(1)方法一:使用输入操符来填充一个C字符串变量
#cin、cout要写头文件#include<iostream>
char a[80];
cin>>a;
//输入:abc defg
//输出:abc
注:以这种方式来读取C字符串时,输入会在下一个空格或者换行符处停止。
(2)方法二:使用预定义函数getline获取整行输入(包括空格)
getline函数有两个参数:第一个参数用于接收输入的C字符串变量;第二个参数用于规定getline最多能接收的字符个数。
char a[80];
cin.getline(a,80);
当遇到行结束的时候,输入才会停止。
C字符串的转换
atoi函数获取一个C字符串参数,返回对应的int值。如果参数不与一个int值对应,atoi就会返回0。atoi函数在文件为cstdlib的库中。如果数字太大,不能转换成int类型的值,可以使用atol将字符串转换为long类型的值。
atoi("1234"); //返回整数1234
atoi("#123"); //返回0
C++
把字符串封装成了一种数据类型string,即可直接声明变量,进行赋值等字符串操作。
头文件 | 声明 | 初始化 | 必须声明字符串长度? | 实现字符串赋值 | 使用一个null字符? | ||
---|---|---|---|---|---|---|---|
C字符串 | <string> 或<string.h> | char str[50]; |
| YES | strcpy(name,"John"); | YES | |
C++ | <string> 或<string.h> | string str; |
| NO | name = "John"; | NO |
C++string类的输入
(1)方法一:和C字符串输入的方法一相同。
(2)方法二:使用getline函数。
string a;
getline(cin,a);
string对象和C字符串之间的转换
//可以将C字符串存储在string类型的变量中
char a[] = "nihao";
string b;
b=a;
//但string对象不能自动的转换为C字符串,
//需要进行显式的类型转换,需要用到string类的成员函数c_str().
strcpy(a,b.c_str());
-
2.STL之动态数组vector(矢量)
C++使用vector要添加头文件:#inlcude<vector> 和 using namespace std;
基本操作
(1)头文件:#include<vector>.
(2)创建vector对象:vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素:cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector<int>::iterator it;//可用auto代替
for(it=vec.begin();it!=vec.end();it++)
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> v;
cout<<v.size()<<endl;//输出v的大小,此处为0
vector<int> v1(5);//大小为5,默认初始化0
vector<int> v2(5,9);//大小为5,初始化9
for(int i=0;i<5;i++){
v.push_back(i);//在 v 的末尾添加 i
}
for(auto it=v.begin();it!=v.end();it++){//使用迭代器访问vector
cout<<*it<<" ";
}
return 0;
}
//v.end()指向容器的最后一个元素的后一个位置