c常用函数

来源:互联网 发布:大宗交易数据查询 编辑:程序博客网 时间:2024/05/22 07:05

1.strstr函数:

头文件:string.h

strstr()函数用来检索子串在字符串中首次出现的位置,其原型为: char *strstr(char *str,char *substr);

参数说明:str为要检索的字符串,substr为要检索的子串。

返回值:返回字符串中str中第一次出现子串substr的地址,如果没有检索到子串,则返回NULL。

其用法总结有三种,第一个是查找子串是否在主串中出现过,第二个是判断主串中有多少个这样的子串,第三种是

输出子串在主串位置的后面的字符。

比如,代码1:

#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k=0;
char *a="i am from hpu!";  //主串 
char *b="am";  // 子串 
char *p;  //定义p为一个指针,用来存放地址。 
while((p=strstr(a,b))!=NULL)   //此处 p表示的是子串在主串中出现的位置。 
{
k=1;break;
}
if(k==1)    //在主串中找到位置输出yes,否则输出no 
printf("yes\n");
else printf("no\n");
return 0;
}

代码二:目的是在主串中找到有多少个这样的字串。

#include<stdio.h>
#include<string.h>
int main()
{
int k,count;
int p1,p2;
char a[1000];  //定义主串 
char b[10];       //定义子串 
char *p;
     while(~scanf("%s%s",a,b))
     {
      count=0;
      p1=strlen(a);
      p2=strlen(b);
        char *m=a;     //定义时指针指向 主串地址 
        //char *m;    //这样不行,不知道原因??? 
// *m=a;
      while((p=strstr(m,b))!=NULL)
      {
      count++;
      m=p+p2;   //找到后向后一一个子串这样的长度 
     
      }
      printf("%d\n",count);  //输出个数 
     
     }
return 0;
}

代码3:

#include<stdio.h>#include<string.h>int main(){    // 也可以改成 char str[] = "http://see.xidian.edu.cn/cpp/u/xitong/";    char *str = "http://see.xidian.edu.cn/cpp/u/xitong/";    char *substr = "see";    char *s = strstr(str, substr);    printf("%s\n", s);    return 0;}
2:strtok函数:

头文件:#include <string.h>

定义函数:char * strtok(char *s, const char *delim);

函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s 字符串,往后的调用则将参数s 设置成NULL。每次调用成功则返回下一个分割后的字符串指针。
返回值:返回下一个分割后的字符串指针,如果已无从分割则返回NULL。

样例代码:

#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k;
char a[1000]="i am from hpu";
//char *a="i am from hpu";    不能这样写!!! 原因不清楚??? 
char *b=" ";
char *p;
p=strtok(a,b);
while(p!=NULL)
{
printf("%s\n",p);
p=strtok(NULL,b);
}
return 0;
}

注意:strtok还可以以多种子串进行分割,比如,

代码:

#include <string.h>main(){    char s[] = "ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z";    char *delim = "-: ";    char *p;    printf("%s ", strtok(s, delim));    while((p = strtok(NULL, delim)))        printf("%s ", p);        printf("\n");}
结果:ab cd ef;gh i jkl;mnop;qrs tu vwx y;z     //-与:字符已经被\0 字符取代

3.字符串转换成数值:

atof(将字符串转换成浮点型数)
atoi(将字符串转换成整型数)
atol(将字符串转换成长整型数)
strtod(将字符串转换成浮点数)
strtol(将字符串转换成长整型数)
strtoul(将字符串转换成无符号长整型数)
toascii(将整型数转换成合法的ASCII 码字符)
toupper(将小写字母转换成大写字母)
tolower(将大写字母转换成小写字母)

4:数字转字符串:

  用C++的streanstream:

  #include <sstream>

  #Include <string>

  string num2str(double i)

  {

  stringstream ss;

  ss << i;

  return ss.str();

  }

  字符串转数字:

  int str2num(string s)

  {

  int num;

  stringstream ss(s);

  ss>>num;

  return num;

  }

  上面方法很简便, 缺点是处理大量数据转换速度较慢..

  C library中的sprintf, sscanf 相对更快

  可以用 sprintf 函数将数字输出到一个字符缓冲区中. 从而进行了转换.

  例如:

  已知从0点开始的秒数(seconds) ,计算出字符串"H:M:S",  其中H是小时, M=分钟,S=秒

  int H, M, S;

  string time_str;

  H=seconds/3600;

  M=(seconds%3600)/60;

  S=(seconds%3600)%60;

  char ctime[10];

  sprintf(ctime, "%d:%d:%d", H, M, S);             // 将整数转换成字符串

  time_str=ctime;                                                 // 结果

  与sprintf对应的是 sscanf 函数, 可以将字符串转换成数字.

  char    str[] = "15.455";

  int     i;

  float     fp;

  sscanf( str, "%d", &i );         // 将字符串转换成整数   i = 15

  sscanf( str, "%f", &fp );      // 将字符串转换成浮点数 fp = 15.455000

  //打印

  printf( "Integer: = %d ",  i+1 );

  printf( "Real: = %f ",  fp+1 );

  return 0;

  输出如下:

  Integer: = 16

  Real: = 16.455000

  补充(by xuzhezhaozhao):

  C标准库了提供了 atoi, atof, atol, atoll(C++11标准) 函数将字符串转换成int,double, long, long  long 型。

  char    str[] = "15.455";

  double     db;

  int     i;

  db = atof(str);   // db = 15.455

  i = atoi(str);    // i = 15

  若字符串为string类型,则要用c_str()方法获取其字符串指针,如下:

  string    str = "15.455";

  double     db;

  int     i;

  db = atof(str.c_str());   // db = 15.455

  i = atoi(str.c_str());    // i = 15


0 0
原创粉丝点击