oj常用函数及模板

  1. stoi(str)
    将string转换为数字串,直到遇到第一个非法字符为止。需要首字符是数字或者空格,否则返回错误。
int main()
{
	char ss[]="_5";
	int a = stoi(ss);
	cout << a+10;
	return 0;
}
//out
//运行时异常
  1. atoi(str)
    将string转换为数字串,直到遇到第一个非法字符为止。首字符为非法字符时,输出0。
int main()
{
	char ss[]="_5";
	int a = atoi(ss);
	cout << a+10;
	return 0;
}
//out
//10
  1. #include < cctype>

isalnum() 如果参数是字母数字,即字母或数字,该函数返回true
isalpha() 如果参数是字母,该函数返回true
isblank() 如果参数是空格或水平制表符,该函数返回true
iscntrl() 如果参数是控制字符,该函数返回true
isdigit() 如果参数是数字(0~9),该函数返回true
isgraph() 如果参数是除空格之外的打印字符,该函数返回true
islower() 如果参数是小写字母,该函数返回true
isprint() 如果参数是打印字符(包括空格),该函数返回true
ispunct() 如果参数是标点符号,该函数返回true
isspace()
如果参数是标准空白字符,如空格、进纸、换行符、回车、水平制表符或者垂直制表符,该函数返回true
isupper() 如果参数是大写字母,该函数返回true
isxdigit() 如果参数是十六进制的数字,即0~9、af、AF,该函数返回true
tolower() 如果参数是大写字符,则返回其小写,否则返回该参数
toupper() 如果参数是小写字母,则返回其大写,否则返回该参数

  1. sscanf和sprintf

首先来看

scanf("%d",&n);//读入一个整型数据
printf("%d",n);//输出一个整型数据

他们可以写成

scanf(screen,"%d",&n);//从屏幕读入一个整型数据
printf(screen,"%d",n);//向屏幕输出一个整型数据

sscanf和sprintf和上面的使用方法一致,从左边的变量中按照格式读入或者输出字符串。

char str[100];
sscanf(str,"%d",&n);
sprintf(str,"%d",n);
  1. 字符串分割

参考此处

1、使用strtok函数

char * res[10];

int main()
{
	char s[] = "Hello    Nice, to meet  ,* you";
	/*
	** 用 空格,星号,逗号进行分割
	** 无论多少个,都会被当作一个key
	*/
	const char* d = "  *,";   //分割依据 
	char *p;  //保存每次分割结果 
	p = strtok(s, d);

	//每个被分割出来的单词压入res数组中
	int index = 0;
	while (p)
	{
		res[index++] = p;
		cout << p << endl;
		p = strtok(NULL, d);
		
	}

	for (int i = 0; i < index; i++) {
		printf("%s\n", res[i]);
	}

	return 0;
}

2、使用find和substr函数

/*
*str:要分割的字符串 
*pattern:分割依据
*result:分割结果 
*/ 
 
//const保证不改变原串,&不用创建新的字符串 
vector<string> splitString(const string& str,const string& pattern)
{
	vector<string> result;
	//string::size_type类型,left:左边界位置  right:右边界位置 
	string::size_type left, right;
	
	right = str.find(pattern);
	left = 0;
	
	while(right != string::npos)
  	{
  		//以免字符串首部就是分割依据,压入长度为0的字符串 
  		if(right-left)
  		{
  			//压入起始位置为left,长度为(right-left)的字符串 
    		result.push_back(str.substr(left, right-left)); 
  		}	
    	left = right + pattern.size();   //右边界右移分割依据的长度,作为新的左边界 
    	right = str.find(pattern, left);   //从left这个位置开始find 
  	}
  	
  	//退出循环时,左边界不是最后一个元素 
  	if(left != str.length())
  	{
  		result.push_back(str.substr(left));
  	}
  	
  	return result;    	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值