编程基础-编程中常用的函数

2015/07/08 C和C++基础

输入输出

1.gets和scanf

scanf输入字符串当字符串中含有空格的时候,空格后面的部分将不会被读入;而用gets则可以;比如一定义变量name:

scanf("%s",name);
gets(name);

当你从键盘输入:string question时,两者的name变量的值分别为:1、string;2、string question;

2.puts

#include <iostream>

using namespace std;

int main(){
	char name[20];
	gets(name);
	puts(name);
	system("pause");
}

3.getline

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
	string line;
	vector<string> vec;
	do{
		getline(cin,line);
		vec.push_back(line);
	}while(line.length()!=0);
	for(int i=0;i<vec.size();i++){
		cout<<vec[i]<<endl;
	}
	system("pause");
}

数值转换为char*

1.itoa,ltoa,ultoa:int转char*

#include <stdio.h>
#include <stdlib.h>

int main(){
	//itoa() ltoa() ultoa() 参数和用法都一样
	int num_int=435;
	char str_int1[30];
	char *str_int2=(char*)malloc(sizeof(10));

	itoa(num_int,str_int1,10);        //把整数num_int转换成字符串str_int
	itoa(num_int,str_int2,10); 
	
	printf("str_int:%s\n",str_int1);
	printf("str_int:%s\n",str_int2);

	long long num1=123;
	char str_num1[30];
	ltoa(num1,str_num1,10);
	printf("str_int:%s\n",str_num1);

	system("pause");
}

2.gcvt:float,double转char*

#include <stdio.h>
#include <stdlib.h>

int main(){
	float num_float=12.345;
	double num_double=435.14354656;
	char str_float[30];
	char str_double[30];

	gcvt(num_float,4,str_float);   //4和8是控制精度的
	gcvt(num_double,8,str_double); 

	printf("str_float:%s\n",str_float);
	printf("str_double:%s\n",str_double);

	system("pause");
}

3.sprintf函数:

位于头文件:stdio.h

函数的原型:int sprintf(char *buffer, const char *format, [argument]…);

参数列表

buffer:char型指针,指向将要写入的字符串的缓冲区;

format:格式化字符串;

[argument]…:可选参数,可以是任何类型的数据;

返回值:返回写入buffer的字符数,出错则返回-1。

char str1[10];               //整型
int num1=123;
sprintf(str1,"%d",num1);

char str1[20];               //浮点型
float f1=3.1415926;
sprintf(str1,"%f",f1);

char str1[20];               //连接两个字符串
char *who = "I";
char *whom = "CSDN";
sprintf(str1,"%s love %s.",who,whom);   //产生:"I love CSDN."

char*转数值

atoi(),atol(),atof():

#include <stdio.h>
#include <stdlib.h>

int main(){
	int num_int;
	double num_double;
	char str_int[30]="435";
	char str_double[30]="436.55";

	num_int=atoi(str_int);           //转换为整型值
	num_double=atof(str_double);     //转换为浮点型值

	printf("num_int:%d\n",num_int);
	printf("num_double:%f\n",num_double);
	
	system("pause");
}

printf函数

%d或%i:有符号十进制

%o:八进制

%0x或%0X:十六进制

%f:单精度或双精度

%c:单个字符

%s:字符串

%p:指针

-:结果左对齐,右边填空格

char*字符串函数

strcpy

即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

char* strcpy(char* des,const char* source){
	char* r=des;
	assert((des != NULL) && (source != NULL));
 	while((*des++ = *source++)!='\0');
 	return r;
}
memcpy
void *memcpy2(void *memTo,const void *memFrom,size_t size){
	assert((memTo!=NULL)&&(memFrom!=NULL));     //保存memTo和memFrom必须有效
	char *tempFrom=(char*)memFrom;              //保存memFrom的首地址
	char *tempTo=(char*)memTo;                  //保存memTo首地址
	while(size-->0)                             //循环size次 复制memFrom的值到memTo中
		*tempTo++=*tempFrom++;
	return memTo;
}

size是字节的大小,表示要复制多少个字节。memcpy可以复制任意内容,例如字符数组、整型、结构体、类等等。

strlen

求char*的长度,以“\0”结束判读。

strcmp

实现C/C++库函数中的strcmp函数。对于两个字符串str1和str2,若相等则返回0,若str1大于str2则返回1,若str1小于str2返回-1。

int strcmp(const char *src,const char *dst){
	int ret=0;
	//循环比较两个字符是否相等
	//如果不等或者到了dst字符串末尾 退出循环
	while(!(ret=*(unsigned char *)src-*(unsigned char *)dst)&&*dst){
		++src;
		++dst;
	}
	if(ret<0)               //ret保存着字符比较的结果
		ret=-1;
	else if(ret>0)
		ret=1;
	return ret;
}
strrev

字符串反转函数:strrev,例如输入“abcd”,输出为“dcba”。

char *strrev(const char *str){         //通过数组下标方式访问字符串
	int len=strlen(str);
	char *tmp=new char[len+1];
	strcpy(tmp,str);
	for(int i=0;i<len/2;i++){
		char c=tmp[i];
		tmp[i]=tmp[len-i-1];
		tmp[len-i-1]=c;
	}
	return tmp;
}
strcat

使用strcat连接字符串。

#include <iostream>
using namespace std;
int main(){
	char *str1="abc";
	char *str2="ABC";
	char str[10];
	sprintf(str,"%s%s",str1,str2);
	cout<<str<<endl;
	char str3[10];
	str3[0]='\0';       //str3[0]赋为结束符'\0' 以便strcat能正常使用 
	strcat(str3,str1);  //str3变为"abc"
	strcat(str3,str2);  //str3变为"abcABC"
	cout<<str3<<endl;
	system("pause");
}
void strcat(char *str1,const char *str2){
	int pos=0;
	while(str1[pos]!='\0')       //定位字符串str1的末尾
		pos++;

	int len=0;                   //计算字符串str2的长度
	while(str2[len]!='\0')
		len++;

	for(int i=0;i<=len;i++){
		str1[pos+i]=str2[i];
	}
	cout<<str1<<endl;
}

关于string的函数

需包含头文件:include

string初始化
string str="abc";       //直接初始化

str1.push_back('a');    //压入单个字符

string str1="ABC";       
string str2=str1;       //互相赋值

char c[10]="abc";       //char*初始化
string str3(c);

string str4(5,'a');     //用n个字符c初始化
返回string大小和长度
string str="affds"; 
cout<<str.size()<<" "<<str.length()<<endl;  //打印为 5  5
返回string的当前容量(即string中不必增加内存即可存放的元素个数)
string str="affds"; 
cout<<str.capacity()<<endl;    //打印  15
判断string是否为空
string str="affds"; 
cout<<str.empty()<<endl;       //打印 0
两个string的连接
string str1="ABC"; 
string str2="abc";
string str=str1+str2;
cout<<str<<endl;              //打印ABCabc
string的比较

运算符”>”,”<”,”>=”,”<=”,”!=”均被重载用于字符串的比较

string str1="ABC"; 
string str2="abc";
cout<<(str1>str2)<<endl;           //0
cout<<(str1<str2)<<endl;           //1
cout<<(str1==str2)<<endl;          //0
cout<<str1.compare(str2)<<endl;    //-1   大于输出1  小于输出-1  等于输出0
string的子串
string str="abcdefg"; 
string strsub=str.substr(0,3);
cout<<strsub<<endl;                //打印abc
string查找函数

int find(char c, int pos = 0) const:从pos开始查找字符c在当前字符串的位置。

string str="abcdefg"; 
cout<<str.find('c',0)<<endl;       //打印 2
string替换函数

string &replace(int p0, int n0,const string &s):删除从p0开始的n0个字符,然后在p0处插入串s

string &replace(int p0, int n0,const char *s):删除从p0开始的n0个字符,然后在p0处插入串s

string &replace(int p0, int n0,int n, char c):删除p0开始的n0个字符,然后在p0处插入n个字符c

string str="abcdefg"; 
str.replace(0,2,"ABC");
cout<<str<<endl;          //打印ABCdefg
string插入函数

在p0位置插入串s:

string &insert(int p0, const char *s);
string &insert(int p0,const string &s);

在p0位置插入字符串s中pos开始的前n个字符:

string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s, int pos, int n);

在p0处插入n个字符c:

string &insert(int p0, int n, char c);
string str="abcdefg"; 
str.insert(2,"ABC");
cout<<str<<endl;            //输出abABCcdefg
string的删除函数

string &erase(int pos = 0, int n = npos):删除pos开始的n个字符,返回修改后的字符串

string str="abcdefg"; 
str.erase(1,3);
cout<<str<<endl;                     //aefg
string反序
string str="abcdefg"; 
string s(str.rbegin(),str.rend());
cout<<s<<endl;                       //gfedcba
string排序
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
	string str="dcsazg"; 
	sort(str.begin(),str.end());
	cout<<str<<endl;               //acdgsz
	system("pause");
}
string中的front函数和back函数
string str="dcsazg"; 
cout<<str.front()<<" "<<str.back()<<endl;  //d  g

申请内存函数

malloc
int *m=(int*)malloc(5*sizeof(int));
free
free(m);
realloc
int *m=(int*)malloc(5*sizeof(int));
m=(int*)realloc(m,(10+10)*sizeof(int));

Search

    Post Directory