字符与C风格字符串简记
1.gets()
读入一行,
以换行作为分隔符(回车),
能读入tab将其当做一个字符,
能读入空格当做一个字符,
如果直接回车能读入一个空串。
如果前面有别的字符,从最后一个未被读入的位置开始读入(不一定是行首),如果要行首可以while(getchar()!='\n');跳过换行前的字符。
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; int main(){ int a[10]; char ch[1000][10]; for(int i=0;i<10;++i){ scanf("%d",&a[i]); while(getchar()!='\n'); gets(ch[i]); printf("%d\n%s\n",a[i],ch[i]); } return 0; }
2.char ch[1000]
只能在初始化的时候整体赋值,之后再赋值只能用数组下标的方式。
可以用puts(ch)输出。
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; int main(){ int a[10]; char ch[1000]="apple and pear."; puts(ch); return 0; }
3.空字符
str[ i ] = 0 和 str[i] = ‘\0’ 等价。
char str[30] = {0}; //初始化为 0,或者说 '\0' 。
4.strlen(str)
字符数组或者字符串中字符的个数,不包括空字符。
5.strcpy(目标串,源字符串)
strncpy(目标串,源字符串,拷贝的位数)
6.strcat(目标串,源字符串)
7.char* strchr(目标串,被找的字符)(第一个出现)
如果要的到被找的字符的位置则 int pos = strchr(目标串,被找的字符) - 目标串;
如果要的到被找的字符的位置则 char *char_left = strchr(目标串,被找的字符) ;
#include<bits/stdc++.h> using namespace std; int main(){ int a[10]; char ch[1000]="apple pear ,banana orange"; char *pos=strchr(ch,','); cout<<++pos<<endl; return 0; }
char* strrchr(目标串,被找的字符) (最后一个出现的位置)
8.strcmp(str1, str2)
字符串比较,str1比较大则返回1,第二个比较大则返回-1,相当则返回0
9.strncmp(s1,s2,n)//比较串s1和s2的前n个字符
strnicmp(s1,s2,n)//比较串s1和s2的前n个字符,不区分大小写,VC6中有,其他编译器可能没有(可以先都转成小写或者大写然后再比较)
strncmp(s1+3,s2+5,n)//比较串s1第3个字符开始的n个字符和s2第5个字符开始的n个字符。
stricmp(); 或者 stricmp();//忽略大小写
/*建议都转成小写之后比较,因为有的编译器可能没有stricmp()*/
10.strcspn(str1, str2)
返回字符串s1中第一个在s2中出现的字符在s1中的下标值,即在s1中出现而s2中没有出现的子串的长度。
#include<bits/stdc++.h> using namespace std; int main(){ char str1[100] = "To see a world in a grain of sand"; char str2[100] = "rain"; cout<<strcspn(str1, str2)<<endl; return 0; }
输出:7
11.strdup(str1)
将串拷贝到新建的位置处,注意,在使用该函数时,申请了一片新的内存,所以使用后必须释放。
#include<bits/stdc++.h> using namespace std; int main(){ char str1[100] = "To see a world in a grain of sand"; char *new_char; new_char=strdup(str1); printf("%s\n",new_char); free(new_char); return 0; }
12.strnset(str, ch, n)
将一个字符串中的前n个字符都设置成ch字符
13.strrev(str)
翻转字符串
14.strupr(str)
转换成全大写(对非字母没有影响)
strlwr(str)
转换成全小写(对非字母没有影响)
15.char *strstr(str1,str2)
查找 str2 字符串在 str1 中第一次出现的位置
找不到则返回NULL
16.strset(str,a)
将str中的所有字符都设置成a(a可以是控制字符)
#include <bits/stdc++.h> using namespace std; int main(void) { char h[100]="Fr643532 $%#^^%*<>{}{} a nk Bo rland"; char a[]="35000000"; strset(h,'a'); strset(a,'a'); printf("%s\n%s\n",h,a); return 0; }
17.strtok()
#include <bits/stdc++.h> using namespace std; int main(void){ char h[100]="a**b****d"; char *tok=strtok(h,"*"); while(tok!=NULL){ printf("%s\n",tok); tok=strtok(NULL,"*"); } return 0; }
18.int strspn(str1, str2)
返回第一个字符串中不在第二个串中出现的字符的数组下标。
#include <bits/stdc++.h> using namespace std; int main(void){ char h[100]="apple apple apple"; char t[50]="apple"; int pos=strspn(h,t); cout<<pos<<endl<<(h+pos)<<endl; return 0; }
c-风格的字符串常量表示地址,所以,word=="mate",这个关系式并不是判断两个字符串是否相同,而是查看他们是否存储在相同的地址上。