c和c++中的字符串使用(c++知识篇)

简述

c对子符串的操作是用各种函数来实现的 对应头文件是#include<string.h>

c++中的字符串是类,头文件是#include 《string 》

c中字符串

1.声明定义
char str[]=“hello”;
char *str=“xuxiaojiao”;
上面默认在尾巴加上一个’\0‘做结尾。
比如char *str[]={‘h’,‘e’,‘l’,‘l’,‘o’,‘\0’};等价char str[]=“hello”;

2.字符串输入
char str[20];
gets(str);//键盘输入,遇到回车作为结束,

3.字符串输出
char str[]=“hello”;
printf(“%s”,str);
puts(str);等价于printf(“%s\n”,str);

4.字符串的操作
这里才是#include<string.h>起作用的时候

*1.串的长度 int strlen(char str);
char str[]=“hello”;
cout<<strlen(str)<<endl; 输出5
注意:不包括结尾NULL字符,而sizeof则会包括

*2.串复制 char *strcpy(char *str1,char str2)
char str1[]=“hello”;
char str2[20];
strcpy(str2,str1); //str为"hello"
注意:(保证目标str2[]有足够空间存放str1[])

char* strcpy(char* dest, const char* src)
{
	if (dest == NULL || src == NULL)
		return NULL;
	//assert(dest !=NULL  &&  src !=NULL )
	
	char* pdest = dest;
	while (*src !='\0') {
		*pdest++ = *src++;
	}
	return dest;
}

*3.串连接 char strcat(char str1,charstr2)
char str1[]=“hello”;
char str2[20]=“xuxiaojiao”;
strcat(str2,str1); //s2为"helloxuxiaojiao"
注意:保证目标str2有足够空间存放两个子符串的总长度

char* strcat(char* dst, const char* src)
{
	if (dst == NULL || src == NULL)
		return NULL;
	char* pdst = dst;
	while (*pdst++ != '\0');
	while ((*pdst++ = *src++) != '\0');

	return dst;
}

*(4)串比较 int strcmp(char *str1, char str)
char str1[]=“hello”;
char str2[20]=“xuxiaojiao”;
result=strcmp(str2,str1); //result>0
result=strcmp(str2,str2); //result=0
result=strcmp(str1,str2); //result<0
注意:比较的是对应字符的ASCII码值,一位一位的比,只要有不等就返回,若相同则继续比较下一位

int strcmp(const char* str1, const char* str2)
{
	int ret = 0;
	//一旦不相等直接跳出循环
	while (!(ret = *(unsigned int*)str1 - *(unsigned int*)str2) && *str2){
		str1++;
		str2++;
	}
	if (ret < 0)
		return -1;
	else if (ret > 0)
		return 1;	
	return ret;
}

*5.串定位 char *strchr(char str , char ch)
char str1[]=“hello”;
char str2[20]=“xuxiaojiao”;
p=strchr(str1,‘o’); //找到返回字符在字串中的位置,否则返回-1
strcpy(p,s2); //str1为"“hellxuxiaojiao”

c++中字符串

1.声明定义
string s1(); // s1= “”
string s1;// s1 = “”

string s2(“Hello”); // s2 = “Hello”
string s(str):生成字符串为str的复制品

string s3(4, ‘K’); // s3 = “KKKK”
string s4(“12345”, 1, 3); //s4 = “234”,即 “12345” 的从下标 1 开始,长度为 3 的子串

2.字符串操作

1.串大小(所含字符的个数)
string str(“hello”);
cout << “size=” << str.size() << endl; // size=5
cout << “length=” << str.length() << endl; // length=5

注意:字符串的结尾并没有NULL结尾

2.串比较
string A(“aBcdf”);
string B(“AbcdF”);
string C(“123456”);
string D(“123dfg”);

cout << “A.compare(B)” << A.compare(B) << endl;//"aBcdf"和"AbcdF"比较,a>A,返回1

cout << “A.compare(2, 2, B)” << A.compare(2, 2, B)<< endl;//"cd"和“AbcdF"比较,c>A,返回1
cout << “A.compare(2, 2, B, 2, 2)” << A.compare(2, 2, B, 2, 2) << endl;//"cd"和“cd"比较,返回0
cout << “C.compare(0, 4, D, 0, 4)” << C.compare(0, 4, D, 0, 4)<< endl; //"1234"和"123d"比较,返回-1

3. 串的插入 push_back() 和 insert()

 从尾巴插一个字符===栈
s1.push_back('a');
s1.push_back('b');
s1.push_back('c');
cout<<s1<<endl; // s1为abc

在制定的位置pos前插入字符char insert(pos,char):
s1.insert(s1.begin(),‘1’);
cout<<s1<<endl; // s1为 1abc

4.串拼接 append() 、 + 十分的常用
string s1(“abc”);
s1.append(“def”);
cout<<s1<<endl; // s1为 abcdef

string s2 = “abc”;
string s3 = “def”;
/s2 += “def”;/
s2 += s3.c_str();
cout<<“s2:”<<s2<<endl; // s2:abcdef

5.串的大小写转换 tolower() toupper()
tolower(char) 和 toupper(char) :将字符进行大小写转换

6.串的查找
find (const char* s, size_t pos):在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引
find (char c, size_t pos):在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引

7.串的排序
sort(iterator iter1, iterator iter2):对[iter1, iter2)进行排序
string s = “cdbaef”;
sort(s.begin(), s.begin() + 3);
cout << “s:” << s << endl; //s:bcdaef

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋哥爱做饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值