一、初始化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的常用操作

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!       ",那么输出是:

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!       ",那么输出是:

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 #442 A Alex and broken contest【字符串/常量数组/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. C# 字符串、数组和List的截取和转换

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

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

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

  5. java基础面试题:如何把一段逗号分割的字符串转换成一个数组? String s = "a" +"b" + "c" + "d";生成几个对象?

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

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

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

  7. 字符串操作函数:JSON.parse()与JSON.stringify()的区别,字符串转数组 str.split(','),数组转字符串String(),以及对象拼接合并Object.assign(),数组拼接合并concat()

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

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

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

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

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

随机推荐

  1. Jtest的简单使用

    Jtest主要用于快速测试自己的代码是否正确 条件,导入相应的Jtest包 @Test    public void test() {        System.out.println(" ...

  2. [osg]osg背景图设置

    转自:https://blog.csdn.net/qq_30754211/article/details/61190698 #include <osg/Geometry> #include ...

  3. python测试相关小问题

    实操中的小问题 pycharm 一次运行多个test configuration 项目分层,分包之后,tests也分到不同层的不同project里了,tests也分开. 为了防止基层模块改动,影响上层 ...

  4. ZOJ 3965 Binary Tree Restoring

    Binary Tree Restoring 思路: 递归 比较a序列和b序列中表示同一个子树的一段区间,不断递归 代码: #include<bits/stdc++.h> using nam ...

  5. Django 基础介绍

    Django 介绍 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由 ...

  6. Python 读写操作Excel —— 安装第三方库(xlrd、xlwt、xlutils、openpyxl)

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  7. Mongodb脚本记录

    mongoexport -h -d stat_terminalbase -c stat_terminalbase -f terminal_mac,detect_time,site_id,device_ ...

  8. python中文件的读和写操作

    一.打开文件 data = open("yesterday",encoding="utf-8").read() # python默认的打字符编码是unicode ...

  9. (转)stm32启动文件详解

    在<<STM32不完全手册里面>>,用的是STM32F103RBT6,所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字 ...

  10. 最简单的网络图片的爬取 --Pyhon网络爬虫与信息获取

    1.本次要爬取的图片的url http://www.nxl123.cn/static/imgs/php.jpg 2.代码部分 import requestsimport osurl = "h ...