今日诗词:
绿蚁新醅酒,红泥小火炉。
晚来天欲雪,能饮一杯无。
——问刘十九 【唐】(白居易)
目录
正文:
1.计算字符串的长度:
2.字符串之间的比大小
规则:
举例:strcmp(s1,s2)
3.字符串其他基本操作
代码演示:
下期预告:C++字符串操作中的陷阱
今天我们来说一说C++的字符串的基本操作。我们利用字符串中的库中的函数就可以快速的实现对一些字符串的处理。
正文:
我们可以直接利用函数求出字符串的长度,字符串的比较(ASCII码表),字符串的拼接,粘贴,查找等功能。
1.计算字符串的长度:
#include<iostream>
using namespace std;
#include<string.h>
int main()
{
char m[]={"hello"};
for(int 1=0;i<strlen(m);i++)
{
cout<<m[i]<<endl;
}
int n=sizeof(m)/sizeof(m[0]);
cout<<strlen(m)<<endl;
cout<<sizeof(m)<<endl;
cout<<n<<endl;
return 0;
}
这里我们一共输出了三个长度,第一个是利用string头文件里的strlen的长度函数来计算字符数组的长度,第二个输出了利用sizeof来求出的字符串实际长度(这两个输出的大小会不同),第三个我们来比较一下两种求字符数组长度的方法之间有什么不同。
实际上我们的第一种输出的就是hello的长度是5;第二种因为我们要输出hello的实际长度,我们都知道字符串的实际长度还有一个\0在在字符串的结尾,那么实际的长度就会比strlen的长度要多1,最后一个输出的长度和第一种的长度大小是一样的,但是利用字符串头文件的函数要比直接计算长度要更加的简单,快捷。
2.字符串之间的比大小
我们会利用string中的比较函数来比较哪一种的长度会更加长,但是注意这里比较的其实就是对应字符的ASCII码表的长度,并不是字符数组的长度。
#include<iostream>
using namespace std;
#include<string.h>
int main()
{
char m[]={"hello"};
char n[]={"wello"};
cout<<strcmp(m,n)<<endl;
char s[]={"apple"};
char e[]={"banana"};
cout<<strcmp(e,s)<<endl;
char x[]={"hello"};
cout<<strcmp(m,x)<<endl;
return 0;
}
规则:
这里我们定义了几个字符数组,我们调用strcmp函数来比较这几个数组的大小。两个字符串从左向右依次对比(按照ASCII码表的值来比较),直到出现不同的字符或者出现\0为止。
举例:strcmp(s1,s2)
如果s1<s2那么输出负数;如果s1=s2那么输出0;如果s1>s2那么输出正数。至于是多大的负数还是正数这个因编译器而定。大家可以自行对上述的代码进行判断。不清楚ASCII码表的同学可以点击链接查看 ASCII
3.字符串其他基本操作
1.strcpy(s1,s2)这个操作就是将s2中的值拷贝到s1中。
2.strcpy(s1,s2,n)这个操作是将s2中的前n个值拷贝到s1中。
3.strcat(s1,s2)这个操作就是将s2拼接到s1中。
4. strchr(s1,he)查找s1中he第一次出现的位置。
5.strstr(s1,s2)查找s1中s2第一次出现的位置。
代码演示:
#include<iostream>
using namespace std;
#include<string.h>
const int MAX=12;
int main()
{
char s[MAX]={0};
char n[]={"hello"};
chr m[]={"wello"};
cout<<strcpy(s,n);
cout<<strcpy(s,n,2);
cout<<strcat(s,m);
int unsigned len=strlen(s);
for(int i=0;i<strlen(s);++i)
{
cout<<s[i]<<endl;
}
return 0;
}
这里我们定义了三个数组,两个字符数组,一个空数组(用来存储)。首先我们将n的数组的值拷贝到s中;然后我们将n中的前两个字符拷贝到s中;接着我们将m拼接到字符串s后;最后我们遍历整个数组,查看结果。
大家可以预测一下结果:最后输出的有:hello;hellohe;hellohewello。同样的也没有什么特别的难度。
这里要说一下,我们在这一步(char s[MAX]={0};)是做了初始化。而且这里还会出现一个警告,那是因为我们的i是int型(有符号数),len却是无符号数,这就导致了二者不匹配,这个问题我在之前的类型转换那里也说到过。C语言类型转换的问题
这里我们还可以对代码优化一下,节省一下时间,就不用每次循环都去计算长度。
int unsigned len=strlen(s);
for(int i=0;i<len;++i)
{
cout<<s[i]<<endl;
}
这里我让大家思考一个问题:我们利用strcpy函数将s1拷贝到s2,上文是s1内存足够的情况,那么如果s1的内存不够呢,会发生什么呢?这个问题作为下期内容的引言
🆗到这里,这篇关于:C++字符串的基本操作就说完了,求一个免费的赞,感谢阅读。