概述
memory limit exceed:超出内存限制: 一般是①数组开太大②每一组的样例的初始化没初始化好。
1.使用C语言提供的函数:toupper(),tolower()
使用这两个函数需要引入头文件:#include<ctype.h>
ASCII: A~Z:65~90,a~z:97~122
注意调用transfrom时要用头文件#include<algorithm>
string 类大写转小写:
transform(strA.begin(), strA.end(), strA.begin(), ::tolower);
string类小写转大写:
transform(strA.begin(), strA.end(), strA.begin(), ::toupper);
1、strcmp(str1,str2):
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
#include<algorithm>//STL reverse函数的头文件,reverse反转函数,
find()函数
string st2("aabcbcabcbabcc");
string str1("abc");
cout << st2.find(str1, 2) << endl;//6 从st2的位置2(b)开始匹配,返回第一次成功匹配时匹配的串(abc)的首字符在st2中的位置,失败返回npos
stringstream类:#include<sstream>,运用此方法不需要讲一群数字组成的串用空格分开
样例①
#include <iostream>
#include <sstream>
#include <string>
#include <set>
using namespace std;
int main(){
set<string>st;
string str;
while(getline(cin,str)){
st.clear();
if(str[0]=='#')
break;
stringstream strm(str);
string tmp;
while(strm>>tmp)
st.insert(tmp);
cout<<st.size()<<endl;
}
return 0;
}
样例2:
#include<sstream>
#include<string>
#include<iostream>
using namespace std;
int main(){
string line;
while(getline(cin,line)){
int x;
stringstream ss(line); //建立stringstream对象,初始化流内容为line所代表的字符串
while(ss>>x) //从line中一次读取数字存入x
cout<<x<<endl;
}
return 0;
}
如果输为:"12 23 43 555"
则输出为
12
23
43
555
strtok()
①分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
②看上面的文字叙述应该不好懂,看下面这段代码就懂了
char s[1000],a[1000][1000];
int main()
{
while(gets(s))
{
if(strcmp(s,"#")==0)
break;
int i,j,k,n=0;
char *p;
p=strtok(s," ");//以空格分开
for(i=0;p!=NULL;i++)
{
strcpy(a[i],p);
// cout<<a[i]<<endl;
p=strtok(NULL," ");
}
。。。。。。此处省略
2、strncpy():
strncpy 是 C语言的库函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *dest, const char *src, int n),把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。
3、字符串截取:
#include<stdio.h>
#include<string.h>
int mid(char str[],int start,int len,char strback[]);
int main()
{
//char a[]="I have a dream";//初始化字符数组就不用指定它的大小
char str[100];
char newstr[100];//只是纯粹的申明一个字符数组变量就必须要指定一个大小
gets(str);//在VS2008里面会出现警告(gets不安全。),把gets改为gets_s就不会出现警告提示了
int m=mid(str,2,4,newstr);
if(m)
{
printf("%sn",newstr);//输出字符串,与下面的一样的效果
//puts(newstr);
}
else
{
printf("超出字符串长度n");//加上/n才会换行
puts("超出字符串长度");//输出玩字符串后会自动换行
}
return 0;
}
int mid(char str[],int start,int len,char strback[])
{
int l,i,k=0;
l=strlen(str);
if(start+len>l)
return 0;
for(i=start;i<start+len;i++)
{
strback[k]=str[i];
k++;
}
strback[k]='