C++学习之:字符串

        除了科学计算外,计算机最主要的用途是文字处理。有一系列字符组成的一个处理单元称为字符串,C++中的字符串是用一对双引号括起来、由'\0'作为结束符的一组字符。

1.字符串存储

        字符串符合数组的两个特性:所有元素类型都是字符型,字符串中的字符有先后的次序,所以通常用一个字符数组来存储字符串。如将“hello,world!”这个字符存储在字符数组中:

char ch={'h','e','l','l','o',',','w','o','r','l','d'};
注意末尾要加一个'\0',数组长度是字符串长度再加1.

或者

char ch={"hello,world"};

或者

char ch="hello,world";

注意:

        1.不包含任何字符的字符串称为空字符串。空字符串用一对双引号表示,即“”。空字符串占一个字节的空间,这个字节中存放的是一个'\0'.

        2.在C++中,'a'和“a”是不一样的,前者表示一个字符常量,在内存中占1个字节,里边存放字符a的内码值,后者是一个字符串,用一个字符数组存储,它占2个字节空间,第一个字节存放字母a的内码值,第二个字节存放'\0'.

2.字符串的输入/输出

        三种方法

  • 逐个字符的输入输出,与操作数组一样
  • 将整个字符串一次性地用对象cin和cout的>>和<<操作完成输入或输出。
  • 通过cin的成员函数getline输入。

        如定义一个字符数组ch,要输入一个字符串放在ch中,可以直接:

cin>>ch;

        如上操作将导致键盘输入的字符依次存放在ch数组中,直到读入一个空白字符为止。要输出ch的内容可以用:

cout<<ch;

这时,ch数组中的字符依次被显示在显示器上,直到遇见'\0'.

        注意:使用>>输入字符串时不能输入空白字符,即不能包含如空格、回车、Tab键。使用>>输入字符串不能控制输入的字符串长度,在用键盘输入过程中,不会检查输入的字符个数是否超过了数组长度。输入字符个数超过数组长度,就会占用不属于该数组的空间,这种现象就是内存溢出。内存溢出会导致一些无法预知的错误。所以使用>>输入字符串时,最好设置一些提示信息告知允许的最长字符串长度。

            数组不能直接用cin和cout对象输入输出。数组的输入输出是通过输入输出它的每一个元素实现的。但当用一个字符数组存储一个字符串时是特例!,字符数组能直接输入输出。用>>输入一个字符串时,必须注意空白字符和内存溢出。

使用cin的成员函数getline实现:

cin.getline(字符数组,数组长度,结束标记);

它从键盘接受一个包含任意字符的字符串,直到遇见了指定的“结束标记”或达到了数组长度减1。支持输入空白字符 如空格、回车、Tab键等操作。结束标记可以 不设定,此时默认回车为结束标记。如:

char ch1[80];
char ch2[90];
cin.getline(ch1,80,'.');
cin.getline(ch2,90);

例1.统计一行文字中有多少个单词,单词与单词之间是用空格隔开(即‘’)。

//统计一段文字中的单词个数
#include <iostream>
using namespace std;

int main()
{   
    const int LEN = 80;
    char sentence[LEN+1], prev = ' ';     //prev 表示当前字符的前一字符
    int i, num = 0;

    cin.getline(sentence, LEN+1);

    for (i = 0; sentence[i] != '\0'; ++i) {
        if (prev == ' ' && sentence[i] != ' ') ++num;
        prev = sentence[i];
    }
	  
    cout << "单词个数为:" << num << endl;
  
    return 0;
 }

3.字符串处理函数

        常见的有:复制、拼接、比较等。字符串是以数组的形式存储,所以不能用ch1=ch2,也不能用ch1>ch2这种系统内置运算符操作。

        字符串赋值必须有一个循环来完成对应元素之间的赋值。字符串的比较也是通过比较 两个字符数组的对应元素实现。c语言提供了处理字符串的函数库cstring,C++也可以使用这些函数。


strcpy(dst,src) 将字符串从src复制到dst。函数返回值是dst的地址
strncpy(dst,src,n) 至多从src复制n个字符到dst。函数返回值是dst的地址
strcat(dst,src) 将src拼接到dst后,函数返回值是dst的地址
strncat(dst,src,n) 从src至多取n个字符拼接到dst后。函数返回值是dst的地址
strlen(s) 返回字符串s的长度,即字符串中字符个数(不包括'\0')
strcmp(s1,s2) 比较s1和s2。如果s1>s2,返回值为正,s1=s2返回值为0,s1<s2返回值为负数
strncmp(s1,s2,n) 与strcmp类型,这是至多比较n个字符。
strchr(s,ch) 返回一个指向s中第一次出现ch字符的地址。
strrchr(s,ch) 返回一个指向s中最后一次出现ch字符的地址。
strstr(s1,s2) 返回一个指向s1中第一次出现s2的地址
 


猜你喜欢

转载自blog.csdn.net/wu_qz/article/details/80198860