C/C++常用函数使用总结

2017-01-01 10:25:04来源:CSDN作者:fanyun_01人点击

sscanf()函数: 
  sscanf() - 从一个字符串中读进与指定格式相符的数据. 
  函数原型: 
  Int sscanf( string str, string fmt, mixed var1, mixed var2 ...); 
  int scanf( const char *format [,argument]... ); 
  说明: 
  sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。 
  其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号} 
  注: 
  1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中) 
  2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。 
  3、width表示读取宽度。 
  4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。 
  5、type :这就很多了,就是%s,%d之类。 
  6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值 
  支持集合操作: 
  %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配) 
  %[aB'] 匹配a、B、'中一员,贪婪性 
  %[^a] 匹配非a的任意字符,贪婪性
例子: 
  1. 常见用法。 
  char buf[512] = ; 
  sscanf("123456 ", "%s", buf); 
  printf("%s/n", buf); 
  结果为:123456 
  2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。 
  sscanf("123456 ", "%4s", buf); 
  printf("%s/n", buf); 
  结果为:1234 
  3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。 
  sscanf("123456 abcdedf", "%[^ ]", buf); 
  printf("%s/n", buf); 
  结果为:123456 
  4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。 
  sscanf("123456abcdedfBCDEF", "%[1-9a-z]",buf); 
  printf("%s/n", buf); 
  结果为:123456abcdedf 
  5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。 
  sscanf("123456abcdedfBCDEF", "%[^A-Z]",buf); 
  printf("%s/n", buf); 
  结果为:123456abcdedf 
  6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中 
  sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]",buf); 
  printf("%s/n", buf); 
  结果为:12DDWDFF 
  7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格) 
  sscanf(“hello, world”, "%*s%s", buf); 
  printf("%s/n", buf); 
  结果为:world 
  %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了 
  如果没有空格则结果为NULL。 
  sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式. 
  //------------------------------------------------------- 
  sscanf,表示从字符串中格式化输入 
  上面表示从str中,输入数字给x,就是32700 
  久以前,我以为c没有自己的split string函数,后来我发现了sscanf;一直以来,我以为sscanf只能以空格来界定字符串,现在我发现我错了。 
  sscanf是一个运行时函数,原形很简单: 
  int sscanf( 
  const char *buffer, 
  const char *format [, 
  argument ] ... 
  ); 
  它强大的功能体现在对format的支持上。 
  我以前用它来分隔类似这样的字符串2006:03:18: 
  int a, b, c; 
  sscanf("2006:03:18", "%d:%d:%d", a, b, c); 
  以及2006:03:18 - 2006:04:18: 
  char sztime1[16] = "", sztime2[16] = ""; 
  sscanf("2006:03:18 - 2006:04:18", "%s - %s",sztime1, sztime2); 
  但是后来,我需要处理2006:03:18-2006:04:18 
  仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。 
  我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。 
  format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。 
  %[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。 
  所以那个问题也就迎刃而解了: 

  sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] -%[0-9,:]", sztime1, sztime2); 

strcmp函数:

C/C++函数,比较两个字符串

设这两个字符串为str1,str2,

若str1==str2,则返回零;

若str1>str2,则返回正数;

若str1<str2,则返回负数。

例如:if(0 == strcmp(strType, "gold"))

Strlen函数:

头文件:#include <string.h>
strlen()函数用来计算字符串的长度,其原型为:
    unsigned int strlen (char *s);

格式:strlen(字符数组名)

功能:计算字符串s(unsignedint)长度,不包括'/0'在内;

说明:返回s的长度,不包括结束符NULL

SizeofStrlen的区别与联系

1.sizeof操作符的结果类型是size_t,它在头文件中typedefunsignedint类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''/0''结尾的。sizeof还可以用函数做参数,比如:short f(); printf("%d/n", sizeof(f())); 输出的结果是sizeof(short),即2。4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。5.大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 charstr[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str);//b=20;6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,当适用一静态地空间数组, sizeof归还全部数组的尺寸。 sizeof操作符不能返回动态地被分派了的数组或外部的数组的尺寸9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,如: fun(char[8]) fun(char []) 都等价于 fun(char *)C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小 如果想在函数内知道数组的大小, 需要这样做: 进入函数后用memcpy拷贝出来,长度由另一个形参传进去fun(unsiged char *p1, int len) { unsigned char* buf = new unsigned char[len+1]memcpy(buf, p1, len); }我们能常在用到 sizeof strlen的时候,通常是计算字符串数组的长度看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:charstr[20]="0123456789"; int a=strlen(str); //a=10; >>>>strlen计算字符串的长度,以结束符0x00为字符串结束。 intb=sizeof(str); //b=20;>>>> sizeof计算的则是分配的数组 str[20]所占的内存空间的大小,不受里面存储的内容改变。上面是对静态数组处理的结果,如果是对指针,结果就不一样了char*ss = "0123456789"; sizeof(ss) 结果 4===》ss是指向字符串常量的字符指针,sizeof获得的是一个指针的之所占的空间,应该是长整型的,所以是4sizeof(*ss)结果1===》*ss是第一个字符其实就是获得了字符串的第一位'0'所占的内存空间,是char型的,占了 1strlen(ss)=10 >>>>如果要获得这个字符串的长度,则一定要使用 strlen

Sleep函数:

功能: 执行挂起一段时间 

用法: unsigned sleep(unsigned seconds);  

注意:  

在VC中使用带上头文件#include <windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include<unistd.h> 

在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep

在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。

示例:

#include <windows.h>  

int main()  

{  

  int a;

  a=1000;  

  Sleep(a);  

  return 0;  

} 

usleep函数:

功能: usleep功能把进程挂起一段时间,单位是微秒us(百万分之一秒)。

语法: void usleep(int micro_seconds);

返回值: 无

注意:这个函数不能工作在 Windows 操作系统中。

usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。只是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。且此函数已被废除,可使用nanosleep。 

如果延迟时间为几十毫秒,或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU时间。

 delay函数: 

功能: 将程序的执行暂停一段时间,单位是毫秒ms(千分之一秒)  

用法: void delay(unsigned milliseconds);  

示例:  

#include<dos.h>  

int main(void)  

{  

sound(440);  

delay(500);  

c/c++ 转换说明符:

1. 通配符
      %a(%A)             浮点数、十六进制数字和p-(P-)记数法(C99)
      %c                      表示以(ASCII)字符
      %d                      表示将输出值以整数对待(符号十进制整数) %md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出

      %s            字符串
      %f                       表示以32bit浮点数(包括float和doulbe)
      %e(%E)             浮点数指数输出[e-(E-)记数法]
      %g(%G)             浮点数不显无意义的零"0"
      %i              有符号十进制整数(与%d相同)
      %u             无符号十进制整数
      %o             八进制整数   e.g.     0123
      %x(%X)              十六进制整数0f(0F)  e.g.   0x1234
      %p             指针
      %%            "%"

备注:c语言,%d %.2d %2d%02d的区别

%d就是普通的输出了

%2d是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格

%02d,和%2d差不多,只不过左边补0

%.2d没见过,但从执行效果来看,和%02d一样

2.标志
      左对齐:"-"   e.g.   "%-20s"
      右对齐:"+"  e.g.   "%+20s"
      空格:若符号为正,则显示空格,负则显示"-"   e.g.   "%  6.2f"     
      #:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;
           对e,g,f 类当结果有小数时才给出小数点。
3.格式字符串(格式)
      〔标志〕〔输出最少宽度〕〔.精度〕〔长度〕类型
     "%-md" :左对齐,若m比实际少时,按实际输出。
     "%m.ns":输出m位,取字符串(左起)n位,左补空格,当n>mor m省略时m=n
 e.g.    "%7.2s"   输入CHINA

VFP字符函数的一种。表示的是字符型函数。格式是:SUBSTR(<字符表达式>、<数值表达式1>[,<数值表达式2>].                                           输出"     CH"
     "%m.nf":输出浮点数,m为宽度,n为小数点右边数位
e.g.    "%3.1f"    输入3852.99
       输出3853.0 
      长度:为h短整形量,l为长整形量

c语言库函数[string.h]之substr_函数():

函数原型: substr_(char *dest, const char* src, unsigned int start,unsigned int len)

#include<assert.h>

#include<stdio.h>

//substr截取子串

char * substr_(char *dest, const char* src,unsigned int start, unsigned int len){

strncpy_(dest,src+start,len);//或者调用系统strncpy函数

dest[len] ='/0';

return dest;

}

SUBSTR(cExpression,nStartPosition[,nCharactersReturned])
其中,cExpression指定要从其中返回字符串的字符表达式或备注字段;nStartPosition用于指定返回的字符串在字符表达式或备注字段中的位置,nCharactersReturned用于指定返回的字符数目,缺省时返回字符表达式的值结束前的全部字符。
举例
STORE'abcdefghijklm' To mystring
substr_ (mystring ,1,5) 显示 "abcde"
substr_ (mystring ,6) 显示 "fghijklm"
substr_ (mystring,-2)显示“lm”
substr_ (mystrng,-4)显示“jklm”、
substr_ (char A,char B,int C, int D)
  这个函数主要用于字符串的运算,参数A是字符数组或是指向字符串的指针,用于接收字符串,参数B一般也为字符数组或指向字符串的指针,表示要截取字符串的地方,参数C表示从B中截取字符串的起始位置,参数D表示要截取字符串的长度,缺省时返回字符表达式的值结束前B的全部字符。
  上述表达式功能可描述为:从字符串B的第C个字符处开始,截取长度为D的一串字符串,放入字符串数组A中,返回截取的字符串。

C++中substr函数:

#include<string>
#include<iostream>
using namespace std;

main()
{
string s("12345asdf");
string a=s.substr(0,5);       //获得字符串s中 从第0位开始的长度为5的字符串//默认时的长度为从开始位置到尾
cout<<a<<endl;
}

输出结果为:

12345

 


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台