字符串和数组----string

时间:2021-09-15 09:43:52

一、初始化string对象的方式

 #include <iostream>
#include <string> using std::cout;
using std::endl;
using std::string;
void output(string desc, string s){
cout << desc << ":" << s << endl;
}
int main()
{
string s1; // 默认初始化,s1是一个空串
string s2(s1); // s2是s1的副本
string s3 = s1; // 等价于s3(s1)
string s4("value"); // s4是字面值"value"的副本,除了字面值最后的那个空字符外
string s5 = "value"; // 等价于s5("value")
string s6(, 'c'); // 把s6初始化成由连续10个字符c组成的串
output("s1", s1);
output("s2", s2);
output("s3", s3);
output("s4", s4);
output("s5", s5);
output("s6", s6);
return ;
}

输出:

字符串和数组----string

  注意:任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代(以空字符结束的指针也可以)。

二、string的常用操作

1)is>>s:从is中读取字符串赋给s,字符串以空白分隔,返回is。

  在执行读取操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,知道遇到下一处空白为止。

 #include <iostream>
#include <string> using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
string s;
cin >> s;
cout << "|" << s << "|" << endl;
return ;
}

如果输入是"         hello world!       ",那么输出是:

字符串和数组----string

2)getline(is,s):从is中读取一行赋给s,返回is。

  函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。getline只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。如果输入一开始就是换行符,那么所得的结果就是个空string。

 #include <iostream>
#include <string> using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
string s;
while (getline(cin,s))
{
cout << "|" << s << "|" << endl;
}
return ;
}

如果输入是"         hello world!       ",那么输出是:

字符串和数组----string

3)s.empty():s为空返回true,否者返回false。

4)s.size():返回s中字符的个数。

  size()函数返回的是一个string::size_type类型的值,是一个无符号的值而且能够存放下任何string对象的大小。

5)s[n]:返回s中第n个字符的引用,位置n从0计起。

6)s1+s2:返回s1和s2连接后的结果。

  两个string对象相加得到一个新的string对象,其内容是把左侧的运算对象和右侧的运算对象串接而成。

  复合赋值运算符(+=)负责把右侧string对象的内容追加到左侧string对象的后面。

  c++语言中的字符串字面值并不是标准库类型string的对象。标准库允许把字符字面值和字符串字面值转换成string对象,所以在需要string对象的地方就可以使用这两种字面值来代替,但是当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string。

7)s1=s2:用s2的副本代替s1中原来的字符。

8)s1==s2:如果s1和s2中所含的字符完全一样,则它们相等;string对象的相等性判断对字母的大小写敏感。

9)<,<=,>,>=:利用字符在字典序中的顺序进行比较,且大小写敏感。

三、字符操作函数

  在cctype头文件中定义了一组标准库函数处理字符。下列的函数从属于命名空间std。

函数 说明
isalnum(c) 当c是字母或数字时为真。
isalpha(c) 当c是字母时为真。
iscntrl(c) 当c是控制字符时为真。
isdigit(c) 当c是数字时为真。
isgraph(c) 当c不是空格但可打印时为真。
islower(c) 当c是小写字母时为真。
isprint(c) 当c是可打印字符时为真(即c是空格或c具有可视形式)。
ispunct(c) 当c是标点符号时为真(即c不是控制字符、数字、字母、可打印空白中的一种)。
isspace(c) 当c是空白时为真(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符中的一种)。
isupper(c) 当c是大写字母时为真。
isxdigit(c) 当c是十六进制数字时为真。
tolower(c) 如果c是大写字母,输出对应的小写字母;否则原样输出c。
toupper(c) 如果c是小写字母,输出对应的大写字母;否则原样输出c。

四、C风格字符串

1、简介

  字符串字面值是一种通用结构的实例,这种结构即是C++由C继承而来的C风格字符串。C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。按此习惯书写的字符串存放在字符数组中并以空字符结束。以空字符结尾的意思是在字符串最后一个字符后面跟着一个空字符('\0')。

2、C标准库String函数

  下列函数定义在cstring头文件中,cstring是c语言头文件string.h的C++版本。

  • strlen(p)  //返回p的长度,空字符不计算在内。
  • strcmp(p1,p2)  //比较p1和p2的相等性。如果p1==p2则返回0,;如果p1>p2,则返回一个正值1;如果p1<p2,返回一个负值-1.
  • strcat(p1,p2)  //将p2附加到p1之后,p2的空字符也会附加上,返回p1
  • strcpy(p1,p2)  //将p2拷贝给p1,p2的空字符也会拷贝过去,返回p1

  注意:传入上述函数的指针必须指向以空字符作为结束的数组。

3、string和字符数组的转换

  string对象提供了c_str()函数,该函数的返回值是一个C风格的字符串。也就是说,该函数的返回结果是一个指针,该指针指向一个以空字符结束的字符数组,而这个字符数组所存的 数据恰好与那个string对象一样。结果指针的类型是const char *,从而确保我们不会改变字符数组的内容。

  注意:我们无法保证c_str函数返回的数组一直有效,事实上,如果后续的操作改变了string对象的值就可能让之前返回的数组失去作用。因此,如果执行完c_str函数后程序想一直都能使用其返回的数组,最好将该数组重新拷贝一份。

字符串和数组----string的更多相关文章

  1. Codeforces Round &num;442 A Alex and broken contest【字符串&sol;常量数组&sol;string类】

    A. Alex and broken contest time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  2. string字符串转数组

    /** * THis_is_a_cat * This Is A Cat * * Cat A Is This * @author Administrator * */ public class Test ...

  3. char型字符串(数组)与string型字符串 指针与引用

    一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指 ...

  4. java基础面试题:如何把一段逗号分割的字符串转换成一个数组&quest; String s &equals; &quot&semi;a&quot&semi; &plus;&quot&semi;b&quot&semi; &plus; &quot&semi;c&quot&semi; &plus; &quot&semi;d&quot&semi;&semi;生成几个对象?

    package com.swift; public class Douhao_String_Test { public static void main(String[] args) { /* * 如 ...

  5. 字符串 字符数组, pcha string 之间的相互转化, 很重要。 很蛋疼

    http://www.cnblogs.com/del88/p/5448981.html Delphi字符串.PChar与字符数组之间的转换 来自:http://my.oschina.net/kaven ...

  6. 字符串操作函数:JSON&period;parse&lpar;&rpar;与JSON&period;stringify&lpar;&rpar;的区别,字符串转数组 str&period;split&lpar;&&num;39&semi;&comma;&&num;39&semi;&rpar;,数组转字符串String&lpar;&rpar;&comma;以及对象拼接合并Object&period;assign&lpar;&rpar;,数组拼接合并concat&lpar;&rpar;

    1.JSON.parse()  把字符串转化为 json 对象 例如 arr={ , "site":"www.runoob.com" } var obj = J ...

  7. Java中将一个字符串传入数组的几种方法

    String Str="abnckdjgdag"; char a[]=new char[Str.length()]; -------------------方法1 用于取出字符串的 ...

  8. 03- Shell脚本学习--字符串和数组

    字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似: 单双引号的区别: 双 ...

  9. js中字符串和数组相互转化的方法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } p. ...

随机推荐

  1. Microsoft &period;NET Framework 4&period;0&period;3版下载

    适用于 Microsoft .NET Framework 4 的更新 4.0.3,其中包含一系列新增功能,用于满足高端客户的功能需求和重要 .NET Framework 方案的需求. http://w ...

  2. numpy常用用法总结

    numpy 简介 numpy的存在使得python拥有强大的矩阵计算能力,不亚于matlab. 官方文档(https://docs.scipy.org/doc/numpy-dev/user/quick ...

  3. mysql int&lpar;3&rpar;与int&lpar;11&rpar;的区别

    总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果i ...

  4. JS模式-基本的单例模式

    //singleton var SingletonTester = (function(){ function Singleton(options){ options = options || {}; ...

  5. JavaScript实现在文本框中输入空格时自动填写某个值

    <script language="javascript" type="text/javascript"> var txtText4 = &quot ...

  6. 【转载】Powershell设置世纪互联Office365嵌套组发送权限

    Start-Transcript ".\Set-GroupSendPermisionLog.txt" -Force function Get-DLMemberRecurse { $ ...

  7. angular中ueditor插件的使用

    #在angularjs中使用ueditor编辑器需要注意事项: 在ui-view中使用放置ueditor的div,页面加载时编辑器在页面中是不显示的,需要通过指令手动replay 例: /** * u ...

  8. Python之路第十二天,高级&lpar;4&rpar;-Python操作rabbitMQ

    rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...

  9. POJ 3111 K Best(二分答案)

    [题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...

  10. C--全排列的实现&lpar;递归方法&rpar; *也能看懂的

      假设数组含有n个元素,则提取数组中的每一个元素做一次头元素,然后全排列除数组中除第一个元素之外的所有元素,这样就达到了对数组中所有元素进行全排列的得目的.[这句话才是重点!] 比如 1,2,3.的 ...