char str[5] = { 'a','b','c','d','e' };
可以直接赋值,但当需要使用puts()输出时,需要加上’\0’,表示该字符串结束,'\0’占用一个字符位。
有三种输入输出方式:scanf和printf,getchar()和putchar(),gets()和puts();
对于字符类型有两种格式:%s和%c
%c:输入单个字符,能够识别空格和换行并将其输入。
%s:输入一串字符存在数组中,通过换行或空格来识别一个字符串的结束。
char str[5] = { 'a','b','c','d','e' };
for (int i = 0;i < 5;i++) {
printf("%c", str[i]);
}
char str[5];
scanf("%s",str);
printf("%s", str);
char str[5][5];
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
str[i][j] = getchar();
}
}
for (int i = 0;i < 3;i++) {
for (int j = 0;j < 3;j++) {
putchar(str[i][j]);
}
}
char str[5];
gets(str);
puts(str);
如果要使用getchar输入,puts输出是,这需要手动在字符串输入完后加上’\0’,否则会乱码。
char str[5];
int i;
for (i = 0;i < 3;i++) {
str[i] = getchar();
}
str[i] = '\0';
puts(str);
字符数组第一个’\0’前的字符个数
int len = strlen(str);
两个字符串比较大小
int cmp = strcmp(str1,str2)
if ( cmp < 0){
printf("str1 < str2");
}else if(cmp > 0){
printf("str1 > str2");
}else{
printf("str1 = str2");
}
把一个字符串赋值给另一个字符串
//把str2复制给str1
strcpy(str1,str2);
把一个字符串接到另一个字符串后面
把str2接到str1的后面
strcat(str1,str2);
C++在STL中加入了string类型,#include
string str1, str2="abcd";
一些简单操作,复制,衔接,比大小,算长度等
如果要读入或者输出整个字符串,只能用cin和count
void stringTest() {
string str1, str2;
cin>>str1;
printf("str1的长度为:%d\n", str1.length());
str2=str1;
str2=str2+"Ilovecat";
printf("str2的长度为:%d\n", str2.size());
if (str1>str2) {
cout<<str1<<'\n';
}
else if (str1 < str2) {
cout << str2 <<'\n';
}
else {
cout << str1 << '\n'<<str2<<endl;
}
}
如果一定要使用printf输出,则用c_str()将string类型转为字符数组类型进行输出.
string str = "abcd";
printf("%s\n", str.c_str());
string str = "abcd";
for (int i = 0;i < str.length();i++) {
printf("%c", str[i]);
}
string str = "abcd";
for (string::iterator it=str.begin();it!= str.end();it++) {
printf("%c", *it);
}
插入函数,时间复杂度O(N)
(1)insert(pos,string)
,在pos号位置插入字符串string
(2)insert(it,it2,it3)
,it为原字符串欲插入的位置,t2和t3为待插字符串的首尾迭代器,来表示串[t2,t3]将被插在it的位置上。
删除函数,时间复杂度O(N)
(1)删除单个元素,str.erase(it),it为需要删除的元素的迭代器。
(2)删除一个区间内的所有元素,str.erase(first,last)
,first为起始值,last为需要删除区间的末尾的下一个地址。str.erase(pos,length)
,pos为起始位置,length为删除个数。
清空string中的数据,时间复杂度为O(1)
截取字符串,substr(pos,len)
,返回从pos号位开始长度为len的子串(不过包括len号位置的值),时间复杂度为O(len)
常数,本身值为-1,但是unsigned_int类型,实际上也可以认为是unsigned_int类型的最大值,用于作为find()失配时的返回值。
str.find(str2)
,当str2是str的子串时,返回其在str中第一次出现的位置,如果不是则返回string::npos。
str.find(str2,pos)
,从str的pos号位置开始匹配str2,返回值与上同。
时间复杂度O(nm),n=str1.length(),m=str2.length()
替换函数,时间复杂度O(str.length)
str.replace(pos,len,str2)
,把str从pos号位开始、长度为len的子串替换成str2.
str.replace(it1,it2,str2)
,把str的迭代器[it1,it2]范围的子串替换为str2.
void stringFuncTest() {
string str = "abcdefg", str1="12345";
//插入
str.insert(3, "xyz");
str.insert(str.begin() + 3, str1.begin(), str1.end());
cout <<"插入后:"<< str << endl;
cout << endl;
//删除
str.erase(str.begin() + 4);
cout << "删除单个元素:"<<str << endl;
str.erase(str.begin() + 5, str.end() - 6);
cout << "删除多个元素:" << str << endl;
str.erase( 3, 5);
cout << "删除多个元素2:" << str << endl;
cout << endl;
//清空
cout <<"str1的长度:"<< str1.length() << endl;
str1.clear();
cout << "clear后str1的长度:" << str1.length() << endl;
cout << endl;
//截取
string str2 = "What are you?";
cout << "str2:" << str2 << endl;
cout<<"截取str2的子串:"<<str2.substr(0, 4)<<endl;
cout << endl;
//string::npos测试
if (string::npos == 1) {
cout << "-1 is true" << endl;
}
if (string::npos == 4294967295) {
cout << "4294967295 is true" << endl;
}
cout << endl;
//找子串
string str3 = "are";
string str4 = "is";
if (str2.find(str3) != string::npos) {
cout << str2.find(str3) << endl;
}
if (str2.find(str4) != string::npos) {
cout << str2.find(str4) << endl;
}
else {
cout << "No Find." << endl;
}
cout << endl;
//替换
cout << "替换str2的结果:" << str2.replace(5, 2, str4) << endl;
}