简述
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