zoukankan      html  css  js  c++  java
  • string::npos的一些说明

    一、定义 
    
    std:: string ::npos的定义:
    
    static const size_t npos = -1;
    表示 size_t 的最大值( Maximum value for size_t ) ,如果对 -1 表示size_t的最大值有疑问可以采用如下代码验证:
    
    #include <iostream>
    #include <limits>
    #include <string>
    using namespace std;
    
    int main()
    {
        size_t npos = -1;
        cout << "npos: " << npos << endl;
        cout << "size_t max: " << numeric_limits<size_t>::max() << endl;
    }
    在我的PC上执行结果为:
    
                     npos:           4294967295
    
                     size_t max:  4294967295
    
    可见他们是相等的,也就是说npos表示size_t的最大值
    
    二、使用
    2.1 如果作为一个 返回值 (return value) 表示没有找到匹配项 ,例如:
    
    #include <iostream>
    #include <limits>
    #include <string>
    using namespace std;
    
    int main()
    {
      string filename = "test";
      cout << "filename : " << filename << endl;
    
      size_t idx = filename.find('.');   //作为return value,表示没有匹配项
      if(idx == string::npos)   
      {
        cout << "filename does not contain any period!" << endl;
      }
    }
    2.2 但是string::npos作为string的成员函数的一个 长度参数 时,表示“ 直到字符串结束 (until the end of the string)”。例如:
    tmpname.replace(idx+1, string::npos, suffix);
    
    这里的string::npos就是一个长度参数,表示直到字符串的结束,配合idx+1表示,string的剩余部分。 
    #include <iostream>
    #include <limits>
    #include <string>
    using namespace std;
    
    int main()
    {
      string filename = "test.cpp";
      cout << "filename : " << filename << endl;
    
      size_t idx = filename.find('.');   //as a return value
      if(idx == string::npos)   
      {
        cout << "filename does not contain any period!" << endl;
      }
      else
      {
        string tmpname = filename;
        tmpname.replace(idx + 1, string::npos, "xxx"); //string::npos作为长度参数,表示直到字符串结束
        cout << "repalce: " << tmpname << endl;
      }
    }
    执行结果为:
    
    filename:test.cpp
    
    replace: test.xxx
  • 相关阅读:
    mysql 复制表数据,表结构的3种方法
    MySQL 存储过程使用表名做参数
    关于mysql engine(引擎)的疑问
    mysql存储过程之循环
    mysql 命令大全
    关于mysql的表名/字段名/字段值是否区分大小写的问题
    navicat for mysql 快捷键(原创)
    解决"Subquery returns more than 1 row"sql查询错误
    mysql:“Access denied for user 'root@IP地址'"
    MySQL常用经典语句
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194791.html
Copyright © 2011-2022 走看看