字符串知识

字符串知识

一.字符串类型

1.“ ”引号之间的字符串 “abcdef”
2.char 数组

char str[6] = {'H''e''\0'};//省略括号中的无语法问题,但数组大小只有3
char str[] = {'H''e'\0'};  //不规定数组大小

(均以null’\0‘结尾) 字符数组的大小要比所存储的字符多1
3.封装的字符串类string

string st("acd");   //string st="acd";
cout << st << endl;

二.字符串的输入输出

1.C语言中的scanf %c用于单个字符 ,%s用于字符数组
char ch;
char s[50];
scanf("%c",&ch);
printf("%c\n",ch);
char st[50];
scanf("%s",st);    //以空格换行表示结束输入    
printf("%s",st);
2.C语言 getchar() putchar() 输入输出单个字符
getchar();      //输入任意字符
char c=getchar();    //输入字符复值给c
3.C语言gets() puts()
char s[40];
gets(s);      // gets()输入字符以换行结束
puts(s);      //  puts()括号输出内容并换行
4.C++ 中getline()函数

分两种:
第一种:在头文件iostream 中,是iostream的成员函数
cin.getline(字符指针,字符个数N,结束符)

 char st[40];
 cin.getline(st,30,' ');
 cout<<st<<endl;
//输入:aadadadawd  aaaa
//输出:aadadadawd
函数原型
istream &getline( char *buffer, streamsize num, char delim );
 
istream &getline( char *buffer, streamsize num );

第二种:在头文件string中
getline(输入流,字符个数N,结束符)
函数原型

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);
istream& getline (istream&& is, string& str);
//用法和上第一种类似,但是读取的istream是作为参数is传进函数的。
//读取的字符串保存在string类型的str中。
//is    :表示一个输入流,例如 cin。
//str   :string类型的引用,用来存储输入流中的流信息。
//delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
string st;
getline(cin,st);
string st;             //输入:aaa ccc
getline(cin,st,' ');   //输出:aaa

三.对字符串处理的相关函数

1.字符数组

C头文件include<string.h>
C++头文件cstring
strlen() 长度
strcpy() 复制
strcat() 拼接
strcmp() 比较
strstr()

char s[40],t[40];
cin>>s>>t;
cout<<strcmp(s,t)<<endl;       //如果s==t 返回0 s>t 返回1 s<t返回-1
char s[40]="acddef",t[40];
strcpy(t,s);
cout<<t<<endl;  //输出:acddef
char s[40]="acddef",t[40]="def";
char  *index=strstr(s,t);
cout<<index<<endl;    //输出:def
函数原型
size_t strlen(const char*);
char* strcmp(const char*, const char*);
char* strncmp(const char*, const char*, size_t);
char* strcat(char*, const char*);
char* strcpy(char*, const char*);
char* strncat(char*, const char*, size_t);
char* strncpy(char*, const char*, size_t);
/*调用函数strrchr和strchr时,第二个实参可以是字符。*/
/*虽然函数原型中第二个参数的类型是int,但字符在计算机中的储存形式是其ASCII码,因此可直接用int类型进行读取。*/
char* strrchr(const char* s, int c); //查找字符串s中是否有字符c,若有则返回该字符最后一次出现的地址,若无则返回空指针
char* strchr(const char* s, int c); //查找字符串s中是否有字符c,若有则返回该字符首次出现的地址,若无则返回空指针
char* strstr(const char* s1, const char* s2);//查找字符串s1中是否有字符串s2,若有则返回该字符串首次出现的首地址,若无则返回空指针
char* strpbrk(const char* s1, const char* s2);//查找字符串s1中是否有字符串s2中的部分内容,若有则返回该部分字符串在s1中首次出现的首地址,若无则返回空指针
2.string

头文件include string
string 对一些运算符进行了重载
合并: +
比较:>= > == < <=

string s1="aaa",s2="ccc";
string s=s1+s2; 
cout<<s<<endl;   //输出:aaaccc
string s1="abc",s2="abcd";
if(s1>s2)cout<<"1";      //字符串比较大小
else cout<<"0";

常用简单的类方法:
size() 当前字符串大小
capacity() 容量
empty() 判断字符串是非为空
length() 当前字符串长度

别人C++string模板类总结

四.字符串算法

1.KMP 串匹配
2.manacher马拉车
3.字符串hash
4.前缀数组 后缀数组

猜你喜欢

转载自blog.csdn.net/weixin_46750633/article/details/108876698