征服 C++

C++ 学习笔记之——字符串和字符串流

2018-12-05  本文已影响13人  seniusen

1. 字符数组

字符数组,也就是存放字符类型数据的数组,只不过字符数组的结尾必须是 '\0'。C++ 已经提供了一些字符串处理函数,这些函数被封装在头文件 <cstring> 和 <string.h> 中。

1.1. 字符串复制
#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

struct {
  char name[40];
  int age;
} person, person_copy;

int main ()
{
    char myname[] = "seniusen";

    /* 用 memcpy 拷贝字符串*/
    memcpy(person.name, myname, strlen(myname)+1);
    person.age = 22;

    /* 用 memcpy 拷贝结构体*/
    memcpy(&person_copy, &person, sizeof(person));

    printf("person_copy: %s, %d \n", person_copy.name, person_copy.age );

    /* memmove 支持重叠内存的拷贝*/
    char str[] = "seniusen works very hard.....!";
    memmove(str+20, str+15, 9);
    puts(str);

    return 0;
}
1.2. 字符串拼接
1.3. 字符串比较
1.4. 字符串搜索
/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}
1.5. 其它

2. 字符串类

此外,为了更方便地对字符串进行操作,C++ 中定义了一个 string 类,可以在使用的时候包含头文件 <string>。

2.1. 构造函数

此外,可以用一个字符串类变量或者字符数组或者字符直接对字符串类变量进行赋值,两个字符串变量拼接则可以直接用加法来实现。

2.2. 迭代器
2.3. 容量
2.4. 元素访问
2.5. 修改字符串
2.6. 其它字符串操作

此外,字符串类还支持将字符串类变量转化为字符数组,在字符串中从前向后查找、从后向前查找等操作。更多方法见此

3. 字符串流

字符串流是以内存中的字符串类对象或者字符数组为输入输出对象的数据流,也即是将数据输出到字符串流对象或者从字符串流对象读入数据,也称之为内存流。

#include <sstream>
#include <iostream>
#include <string>

using namespace std;

int main ()
{
    string str1 = "Hello, seniusen!";
    string str2(str1);

    ostringstream foo(str1);                  // 默认在字符串起始位置添加
    ostringstream bar(str2, ios_base::ate);  // 在字符串末尾位置添加


    foo << " Hi,  seniusen! ";
    bar << " Well done!";

    cout << foo.str() << '\n';
    cout << bar.str() << '\n';

    istringstream strin(str1);
    string str3;

    strin >> str3; // 遇到空格停止插入
    cout << str3 << endl;

    // 生成一个文件名
    string str4;
    stringstream ss;

    ss << "/home/seniusen/";
    ss << 100;
    ss << "_noise_image_";
    ss << 15;
    ss << ".jpg";
    ss >> str4;

    cout << str4 << endl;

    return 0;
}

获取更多精彩,请关注「seniusen」!


上一篇下一篇

猜你喜欢

热点阅读