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
- C#.net常用函数
- c#.net常用函数
- c 常用函数说明
- Linux 常用C函数
- C常用函数
- C/C++常用函数
- linux 常用c函数
- C 常用函数解析
- C 常用字符串函数
- C# 常用字符串函数
- c常用字符串函数
- c常用函数实现
- 常用c 函数
- C 常用函数集
- C语言常用函数
- LINUX常用C函数
- C语言常用函数
- linux 常用c 函数
- HDU 3405 World Islands(最短路)
- 2015/3/14 广工网络同步赛
- Delegates 和 Events 在unity中的使用
- 关于bootstrap 对于 IE9 的兼容问题
- Html5 新增常用标签
- c常用函数
- Chart Controls 简介与下载
- Windows注册服务工具使用
- 一道代数题
- 开启博客之旅
- HDU 5187 思维+快速幂模板
- 如何在win7下安装XP系统?
- Hadoop 配置及hadoop HA 的配置
- 启动Tomcat提示:指定的服务未安装