码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-11 18:02:26      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

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;
}


 

 

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

标签:

原文地址:http://blog.csdn.net/yutianxin123/article/details/52184366

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!