OJ中字符串输入及相关操作

1.     输入数据方式

cin>>a>>b;

char a[10];

cin.getline(a,5);

char a,b,c;

cin.get(a);cin.get(b);cin.get(c);

输入:

AB

CD

那么a的值为‘A‘,b的值为‘B‘,c的值为‘\n\

getline(istream &in, string &s)

在头文件<iostream>中声明了getline函数:

istream::getline

istream&getline (char* s, streamsize n );

istream&getline (char* s, streamsize n, char delim )

std::cin.getline (title,256);

C++中还定义了一个在std名字空间的全局函数,因为这个getline函数的参数使用了string字符串,所以声明在了<string>头文件中了。

istream&getline ( istream& is, string& str, char delim );

istream&getline ( istream& is, string& str );

std::getline (std::cin,name);

sort函数按从大到小排序,比较函数如下:

int comp(constint &a,const int &b)

{

returna>b;

}

Map使用find()函数确定是否包含相关key,如果返回值不等于map.end()就代表找到了。

2.字符串逆序

stringstr("cvicses");

strings(str.rbegin(),str.rend());

cout <<s<<endl;

3.字符串分割

头文件:#include <string.h>

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

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

返回值:返回下一个分割后的字符串指针,如果已无从分割则返回NULL。

#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 字符取代

头文件:#include <string.h>

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

char*strstr( char *str, char * substr );

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

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

int main(int argc,char **argv)
{
char *haystack="aaa||a||bbb||c||ee||";
char *needle="||";
char* buf = strstr( haystack, needle);
while( buf != NULL )
{
    buf[0]='\0';
    printf("%s\n ", haystack);
    haystack =buf + strlen(needle);
    /* Get nexttoken: */
    buf =strstr(haystack, needle);
}
   return 0;
}

用STL进行字符串的分割

涉及到string类的两个函数find和substr:

1、find函数

原型:size_t find ( const string& str, size_t pos = 0 )const;

功能:查找子字符串第一次出现的位置。

参数说明:str为子字符串,pos为初始查找位置。

返回值:找到的话返回第一次出现的位置,否则返回string::npos

2、substr函数

原型:string substr ( size_t pos = 0, size_t n = npos )const;

功能:获得子字符串。

参数说明:pos为起始位置(默认为0),n为结束位置(默认为npos)

返回值:子字符串

实现如下:

//字符串分割函数

std::vector<std::string> split(std::stringstr,std::string pattern)
{
 std::string::size_type pos;
 std::vector<std::string> result;
 str+=pattern;//扩展字符串以方便操作
  intsize=str.size();

  for(int i=0;i<size; i++)
  {
   pos=str.find(pattern,i);
   if(pos<size)
    {
     std::string s=str.substr(i,pos-i);
      result.push_back(s);
     i=pos+pattern.size()-1;
    }
  }
  return result;
}
时间: 2024-11-05 19:04:31

OJ中字符串输入及相关操作的相关文章

数据结构-字符串的统计相关操作

统计字符串的相关操作 统计字符出现次数 /*统计串S中字符的种类和个数*/ #include<cstring> #include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; #define MAXSTRLEN 255 //用户可在255以内定义最长串长 //typedef char SString[MAXSTRLEN+1]; /

python基础===【字符串】所有相关操作

#字符串的相关操作 #基本操作 #+ 字符串连接操作 str1 = '来是come走是go' str2 = '点头yes摇头no' result = str1 + str2 print(result) #* 字符串复制操作 str1 = '天地不仁以万物为刍狗' result = str1 * 3 print(result) #[] 索引操作 str1 = '柳暗花明又一村' print(str1[1]) print(str1[-2]) #[::]取片操作 str1 = '山重水复疑无路' #获

Python字符串和字典相关操作

字符串操作: 字符串的 % 格式化操作: str = "Hello,%s.%s enough for ya ?" values = ('world','hot') print str % values 输出结果: Hello,world.hot enough for ya ? 模板字符串: #coding=utf-8 from string import Template ## 单个变量替换 s1 = Template('$x, glorious $x!') print s1.subs

python中文件读写的相关操作及应用

1:既读又写 1 with open('数据',mode='r+',encoding='utf-8') as f: 2 print(f.read()) #输出结果:python与人工智能密切相关 3 f.write('java也不错') 4 print(f.read()) #输出结果:无输出 ,如果我们想打印 5 # 写入的内容,但是因为光标已经 6 # 移到了字符串的结尾了,所以这里我们 7 #可以使用tell()与seek()来确定位置 改进过后: 1 with open('数据', mod

JavaScript中的DOM及相关操作

一.什么是DOM JavaScript由ECMAScript.DOM和BOM三部分组成,其中DOM代表描述网页内容的方法和接口,即文档对象模型(Document Object Model).在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM,而树形结构就是我们常说的DOM树. 维基百科中介绍DOM更为准确:DOM是一种跨平台和语言非依赖性的应用程序编程接口,即处理现在的HTML,XHTML或XML文档作为树结构,其中每个节点是一个对象,每个节点表示

Object-C中动态类型对象相关操作汇总

Object-C(以后简称OC)中有id类型,相对于明确定义类型的静态类型,称为动态类型. 使用动态类型,配合多态(不同类型拥有同名方法),动态绑定(运行时决定实际调用的方法)可以将很多判断延迟到运行时决定,比如运行时才决定对象是某个类型,决定调用哪个类型的方法等.这样提高了灵活性,但是同样带来了风险,所以和支持动态类型的其他面向对象的语言一样,需要提供机制来做运行时判断,这样可以一定程度规避运行时错误. 看到一个动态类型的实例对象,我们都会习惯提出的问题: 1. 这个对象是属于某个类么?或者这

grails项目中(DB的相关操作)

save:保存Domain对象的数据到对应的库表中(可能是insert也可能是update) findBy: 动态方法,查找并返回第一条记录,方法名可以变化 eg:findByName("Tom") 会返回所有name属性为Tom的对象(只返回第一条记录) findByNameAndPassword("Tom","Mot")会返回所有name属性为"Tom"并且password属性为"mot"的对象 fin

JS 中字符串,数组常见操作

字符串———>数组 abc => ["a","b","c"]   直接使用split方法  “abc”.split(""); split(); 数组———>字符串 直接用join()方法 想起来个题目  :  选取一个字符串的后缀名  类似于.word  .html 这种 方法一 function hz(str){ n=str.split(".")[n.length-1]; return

javascript中日期函数的相关操作

2016-08-03 11:41:10 new Date() new Date(milliseconds) new Date(datestring) new Date(year, month) new Date(year, month, day) new Date(year, month, day, hours) new Date(year, month, day, hours, minutes) new Date(year, month, day, hours, minutes, second