c++处理字符串string.find()与string::npos

利用find函数完成对字符串的查找操作注意:查找字符串a是否包含子串b,不是用strA.find(strB) > 0 而是 strA.find(strB) != string:npos其中string:npos是个特殊值,说明查找没有匹配string::size_type pos = strA.find(strB);if(pos != string::npos){}int idx = str.find(“abc”);if (idx == string::npos)…上述代码中,idx
摘要由CSDN通过智能技术生成

利用find函数完成对字符串的查找操作

注意:

查找字符串a是否包含子串b,不是用strA.find(strB) > 0 而是 strA.find(strB) != string:npos

其中string:npos是个特殊值,说明查找没有匹配

string::size_type pos = strA.find(strB);
if(pos != string::npos){}

int idx = str.find(“abc”);
if (idx == string::npos)

上述代码中,idx的类型被定义为int,这是错误的,即使定义为 unsigned int 也是错的,它必须定义为 string::size_type。
npos 是这样定义的:
static const size_type npos = -1;

因为 string::size_type (由字符串配置器 allocator 定义) 描述的是 size,故需为无符号整数型别。因为缺省配置器以型别 size_t 作为 size_type,于是 -1 被转换为无符号整数型别,npos 也就成了该型别的最大无符号值。不过实际数值还是取决于型别 size_type 的实际定义。不幸的是这些最大值都不相同。事实上,(unsigned long)-1 和 (unsigned short)-1 不同(前提是两者型别大小不同)。因此,比较式 idx == string::npos 中,如果 idx 的值为-1,由于 idx 和字符串string::npos 型别不同,比较结果可能得到 false。
要想判断 find() 的结果是否为npos,最好的办法是直接比较:

if (str.find(“abc”) == string::npos) { … }

错误:if(str.find(“abc”) )
注:找不到abc会返回-1,不为0为True。0为False

通常来说,find函数用于寻找某个序列的在string中第一次出现的位置。

例洛谷P1598

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

输入输出格式
输入格式:
四行字符,由大写字母组成,每行不超过100个字符

输出格式:
由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

输入输出样例
输入样例#1:
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
输出样例#1:
*
*
* *
* * * *
* * * *






A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
说明
每行输出后面不允许出现多余的空格。

解:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
   
    string s;
    char s1[800],s2[800],s3[800],s4[800],f;
    int sum[30],length=0,maxnum=0;
    cin.getline(s1,800);
    cin.getline
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值