字符串那些事

 一:字符串的定义:本质上是一个字符数组

char s[3]={'A','B','\0'};//或者char s[]={'A','B','\0'};

char s[]="ABC";//如果不指定字符串长度,则默认长度是3+1;

注意:要用'\0'做结尾,所以要比实际的多一位,但是字符串数组可以不加;

要用双引号,单个字符用单引号;

输出用%s 单个字符用%c

二:关于gets getchar puts putchar scanf 的注意事项

详见http://t.csdn.cn/jZl0C

int main(){
            /* 
        char s[]="ABSHI SHIh";
        char c='sjhd';
        puts(s);//ABSHI SHIh
        putchar(c);//d 只输出一个字符并且只输入最后一个字符
        
        char a[10];
        scanf("%s",a);//shuzb shuz 
        //不同点:scanf不会接受空白字符 但是gets会接受空白字符 。相同点:都是以回车键输入结束 
        puts(a);//shuzb
        */
        
        /*
        char a;
        a=getchar();//hsua hzu
        putchar(a);//h 只会输出一个字符
        */
        /*
        char b;
        scanf("%c",&b);//shu shu
        putchar(b);//s
        */

        }

小知识的补充:

  //\t 空格8位
  //每个汉字都是两个字符 一个字符8个字节 字符串-用双引号括起来的零个或多个字符     " "—— 空字符串(包含一个空格的)
  //自动加上一个结束符号‘\0’表示结束


 

三:字符串函数:*在使用字符串函数之前需要包含string.h头文件

      //strcpy(目标位置,原来的字符串) 后边的赋值给前面 目标位置内容被覆盖 后面的位置中内容不变
      //strcpy字符串拷贝(不能利用等号进行赋值。例如str1==str2)

      //strcpy(a,"梁lele"); 

    //如果想要 把若干个strcpy函数调用连起来使用:strcpy(str1,strcpy(str2,'''china''));

//strncpy()函数功能类似strcpy 但是它有第三个参数num可以用于限制所复制的字符数——

char *strncpy(char *destination, const char*source,size_t num);

 
      //char a[10]="张三",b[10]="李四";
      //计算字符串的长度  或者strlen(b)
      //printf("%d\n",strlen(b)) ;
    


      //strcat(b,a);//将两个字符串链接在一起;将a追加到b上,a中的原有内容保持不变,返回新的b

*注意:b中必须要有足够的空间可以容纳a。
      //printf("%s",b);//如果将b改为a 则输出的值为梁lele;

    //比较字符串大小 strcmp  前边大则返回一个正整数  前面小则返回一个负数    两者相等返回0;
    //char a[10]="ad123",b[10]="abc456";
    //printf("%d\n",strcmp(a,b));

  //字符串分解函数strtok——char *strtok(char *str,const char*delim):返回字符串str中delimma分隔符分隔的字串,当查找到字符串str末尾时,返回NULL.

参数:str,待分割的字符串(c-string);delimiters,分割符字符串。
该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。

    //判断字符数组中是否都为数字或字符
    //char a[10]="1FDA1123"
    //int n;
    //for(n=0;n<strlen(a);n++)
    //if(!a[n]>='A'&&a[n]<='Z')//判断数字if(!a[n]>='0'&&a[n]<='9')
    //break;
    //if(n=strlen(a))
    //printf("是");
    //else
    //printf("否") ;

    //strspn ——size_t strspn(char const *str, char const *grouo);

  理解:从str的第一个元素开始往后数,看str中是不是连续往后每个字符都在group中可以 。  到  第一个不在gruop的元素为止。看从str第一个开始,前面的字符有几个在group中。
    //char a[10]="454df8a",b[10]=""1234//长度为7 占10个字符
    //printf("%d",strspn(a,"0123456789"));//输出3 判断有几个数字符号
    //if(strspn(b,"0123456789")==strlen(b))//判断数组是否为纯数字 也可判断是否为纯字母
    //printf("是");
    //else
    //printf("否");

 其中2表示25, 11表示25,142,330,(包含逗号)


 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值