字符与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",这个关系式并不是判断两个字符串是否相同,而是查看他们是否存储在相同的地址上。

posted @ 2019-11-17 17:05  Unknown_Island  阅读(131)  评论(0编辑  收藏  举报