没有合适的资源?快使用搜索试试~ 我知道了~
C++ string 用法详解 - BYVoid1
需积分: 0 0 下载量 111 浏览量
2022-08-04
16:20:46
上传
评论
收藏 1.92MB PDF 举报
温馨提示
试读
12页
声明一个足够大得二维字符数组或者一个字符指针数组 读入一行到字符空间 然后分析一行的结构,找到空格,存入字符数组中。关闭文件 写一个排序函数,或者使用写一个比较
资源详情
资源评论
资源推荐
2017/10/18
C++ string 用法详解 - BYVoid
https://www.byvoid.com/zhs/blog/cpp-string 1/12
网
志
列
表
标
签
项
目
游
记
关
于
联
系
十
月
21
2008
作
者
:BYVoid
計
算
機
科
學
C++
技
術
字
符
串
string
用
法
阅
读
: 232789
C++ string 用法详解
C++ string
详
解
任
何
人
对
本
文
进
行
引用
都
要
标
明
作
者
是
Nicolai M.Josuttis
///////////////////////////////////////////////////////////////////////////////////
C++
语言
是
个
十
分
优
秀
的
语言
,
但
优
秀
并不表
示
完
美
。
还
是
有
许
多
人
不
愿
意
使
用
C
或
者
C++
,
为
什
么
?
原
因
众
多
,
其
中之
一
就
是
C/C++
的
文
本
处
理
功
能
太
麻
烦
,
用
起
来
很
不
方
便
。
以
前
没
有
接
触
过
其
他
语言
时
,
每
当
别
人
这
么
说
,
我
总
是
不
屑
一
顾
,
认
为
他
们
根
本
就
没
有
领
会
C++
的
精
华
,
或
者
不
太
懂
C++
,
现
在
我
接
触
perl, php,
和
Shell
脚
本
以
后
,
开
始
理
解
了
以
前
为
什
么
有
人
说
C++
文
本
处
理
不
方
便
了
。
举例来
说
,
如
果
文
本
格
式是
:
用
户
名
电
话号
码
,
文
件
名
name.txt Tom 23245332 Jenny 22231231 Heny 22183942 Tom 23245332 ...
现
在
我
们
需
要
对
用
户
名排
序
,
且
只
输
出
不
同
的
姓
名
。
那
么
在
shell
编程
中
,
可
以
这
样用
:
awk '{print $1}' name.txt | sort | uniq
简
单
吧
?
如
果
使
用
C/C++
就
麻
烦
了
,
他
需
要
做
以
下
工
作
:
先
打
开
文
件
,
检
测
文
件
是
否
打
开
,
如
果
失
败
,
则
退
出
。
声
明
一
个
足
够
大得
二
维
字
符
数
组
或
者
一
个
字
符
指针
数
组
读
入
一
行
到
字
符
空
间
然
后
分
析
一
行
的
结
构
,
找
到
空
格
,
存
入
字
符
数
组
中
。
关
闭
文
件
写
一
个
排
序
函
数
,
或
者
使
用
写
一
个
比
较
函
数
,
使
用
sort()
排
序
遍
历
数
组
,
比
较
是
否
有
相
同
的
,
如
果
有
,
则
要
删
除
,
copy...
输
出
信息
你
可
以用
C++
或
者
C
语言
去
实
现
这
个
流
程
。
如
果
一
个
人
的
主
要
工
作
就
是
处
理
这种
类
似
的
文
本
(
例
如
做
apache
的
日
志
统
计
和
分
析
),
你
说他
会
喜
欢
C/C++
么
?
当
然
,
有
了
STL
,
这
些
处
理
会
得到
很
大的
简
化
。
我
们
可
以
使
用
fstream
来
代
替
麻
烦
的
fopen fread fclose,
用
vector
来
代
替
数
组
。
最
重
要
的
是
用
string
来
代
替
char *
数
组
,
使
用
sort
排
序
算
法
来
排
序
,
用
unique
函
数
来
去
重
。
听
起
来
好
像
很
不
错
。
看看
下
面
代
码
(
例
程
1
):
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
ifstream in("name.txt");
string strtmp;
vector<string> vect;
while(getline(in, strtmp, ''))
vect.push_back(strtmp.substr(0, strtmp.find(' ')));
sort(vect.begin(), vect.end());
vector<string>::iterator it=unique(vect.begin(), vect.end());
copy(vect.begin(), it, ostream_iterator<string>(cout, ""));
return 0;
}
2017/10/18
C++ string 用法详解 - BYVoid
https://www.byvoid.com/zhs/blog/cpp-string 2/12
也
还
不
错
吧
,
至
少
会
比
想象
得
要
简
单得
多
!(
代
码
里
面没
有
对
错
误
进
行
处
理
,
只
是
为
了
说
明
问题
,
不
要
效
仿
).
当
然
,
在这
个
文
本
格
式
中
,
不
用
vector
而
使
用
map
会
更
有
扩
充
性
,
例
如
,
还
可
通
过
人
名
找
电
话号
码
等等
,
但
是使
用
了
map
就
不
那
么
好
用
sort
了
。
你
可
以用
map
试
一
试
。
这
里
string
的
作
用
不
只
是
可
以
存储
字
符
串
,
还
可
以
提
供
字
符
串的
比
较
,
查
找
等
。
在
sort
和
unique
函
数
中
就
默
认
使
用
了
less
和
equal_to
函
数
,
上
面
的
一
段
代
码
,
其
实使
用
了
string
的
以
下
功
能
:
存储
功
能
,
在
getline()
函
数
中
查
找
功
能
,
在
find()
函
数
中
子
串
功
能
,
在
substr()
函
数
中
string operator < ,
默
认
在
sort()
函
数
中
调
用
string operator == ,
默
认
在
unique()
函
数
中
调
用
总
之
,
有
了
string
后
,
C++
的
字
符
文
本
处
理
功
能
总
算
得到
了
一
定
补
充
,
加
上
配
合
STL
其
他
容器
使
用
,
其
在
文
本
处
理
上
的
功
能
已
经
与
perl, shell, php
的
距离
缩
小
很
多
了
。
因
此
掌
握
string
会
让
你
的
工
作
事
半
功
倍
。
1 string
使
用
其
实
,
string
并不
是
一
个
单
独
的
容器
,
只
是
basic_string
模
板
类
的
一
个
typedef
而
已
,
相
对
应
的
还
有
wstring,
你
在
string
头文
件
中
你
会
发
现下
面
的代
码
:
extern "C++" {
typedef basic_string <char> string;
typedef basic_string <wchar_t> wstring;
} // extern "C++"
由于
只
是
解
释
string
的
用
法
,
如
果
没
有
特
殊
的
说
明
,
本
文
并不
区
分
string
和
basic_string
的
区
别
。
string
其
实
相
当
于一
个
保
存
字
符
的
序
列
容器
,
因
此除
了
有
字
符
串的
一
些
常
用
操
作
以
外
,
还
有
包
含
了
所
有
的
序
列
容器
的
操
作
。
字
符
串的
常
用
操
作
包
括
:
增
加
、
删
除
、
修
改
、
查
找
比
较
、
链
接
、
输
入
、
输
出等
。
详细
函
数
列
表参
看
附
录
。
不
要
害
怕
这
么
多
函
数
,
其
实
有
许
多
是
序
列
容器
带
有
的
,
平
时
不
一
定
用
的
上
。
如
果
你
要
想
了
解
所
有
函
数
的
详细
用
法
,
你
需
要
查
看
basic_string
,
或
者
下
载
STL
编程
手
册
。
这
里
通
过
实
例
介
绍
一
些
常
用
函
数
。
1.1
充
分
使
用
string
操
作
符
string
重载
了
许
多
操
作
符
,
包
括
+, +=, <, =, , [], <<, >>
等
,
正
式
这
些
操
作
符
,
对
字
符
串
操
作
非
常
方
便
。
先
看看
下
面
这
个
例
子
:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string strinfo="Please input your name:";
cout << strinfo ;
cin >> strinfo;
if( strinfo == "winter" )
cout << "you are winter!"<<endl;
else if( strinfo != "wende" )
cout << "you are not wende!"<<endl;
else if( strinfo < "winter")
cout << "your name should be ahead of winter"<<endl;
else
cout << "your name should be after of winter"<<endl;
strinfo += " , Welcome to China!";
cout << strinfo<<endl;
cout <<"Your name is :"<<endl;
string strtmp = "How are you? " + strinfo;
for(int i = 0 ; i < strtmp.size(); i ++)
cout<<strtmp[i];
return 0;
}
下
面
是
程
序
的
输
出
Please input your name:Hero
you are not wende!
Hero , Welcome to China!
How are you? Hero , Welcome to China!
有
了
这
些
操
作
符
,
在
STL
中
仿
函
数
都
可
以
直
接
使
用
string
作
为
参
数
,
例
如
less, great, equal_to
等
,
因
此
在
把
string
作
为
参
数
传递的
时
候
,
它
的
使
用
和
int
或
者
float
等
已
经
没
有
什
么
区
别
了
。
例
如
,
你
可
以
使
用
:
map<string, int> mymap; //
以
上
默
认
使
用
了
less<string>
有
了
operator +
以
后
,
你
可
以
直
接
连
加
,
例
如
:
string strinfo="Winter";
string strlast="Hello " + strinfo + "!";
string strtest="Hello " + strinfo + " Welcome" + " to China" + " !";//
你
还
可
以
这
样
:
看
见
其
中
的
特
点
了吗
?
只
要
你
的等
式
里
面
有一
个
string
对
象
,
你
就可
以一
直
连
续
"+"
,
但
有一
点
需
要
保
证
的
是
,
在
开
始
的
两
项
中
,
必
须
有一
项
是
string
对
象
。
其
原
理
很
简
单
:
系
统
遇
到
"+"
号
,
发
现
有一
项
是
string
对
象
。
系
统
把
另
一
项
转
化
为
一
个
临
时
string
对
象
。
执
行
operator +
操
作
,
返
回
新
的
临
时
string
对
象
。
如
果
又
发
现
"+"
号
,
继
续
第
一
步操
作
。
由于
这
个
等
式是
由
左
到
右
开
始
检
测
执
行
,
如
果
开
始
两
项
都
是
const char
,
程
序
自
己
并
没
有
定
义
两
个
const char
的
加
法
,
编
译
的
时
候
肯
定
就
有
问题
了
。
有
了
操
作
符
以
后
,
assign(), append(), compare(), at()
等
函
数
,
除
非
有一
些
特
殊
的
需
求
时
,
一
般
是
用
不
上
。
当
然
at()
函
数
还
有一
个
功
能
,
那
就
是
检
查
下
标
是
否
合
法
,
如
果
是使
用
:
2017/10/18
C++ string 用法详解 - BYVoid
https://www.byvoid.com/zhs/blog/cpp-string 3/12
string str="winter";//
下
面
一
行
有
可
能
会
引
起
程
序
中
断
错
误
str[100]='!';//
下
面
会
抛
出
异常
:throws: out_of_range
cout<<str.at(100)<<endl;
了
解
了吗
?
如
果
你
希
望
效
率
高
,
还
是使
用
[]
来
访
问
,
如
果
你
希
望稳
定
性
好
,
最
好
使
用
at()
来
访
问
。
1.2
眼
花
缭
乱
的
string find
函
数
由于
查
找
是使
用
最
为
频
繁
的
功
能
之
一
,
string
提
供
了
非
常
丰富
的
查
找
函
数
。
其
列
表
如
下
:
函
数
名
描
述
find
查
找
rfind
反
向
查
找
find_first_of
查
找
包
含
子
串
中
的
任
何
字
符
,
返
回
第
一
个
位
置
find_first_not_of
查
找
不包
含
子
串
中
的
任
何
字
符
,
返
回
第
一
个
位
置
find_last_of
查
找
包
含
子
串
中
的
任
何
字
符
,
返
回
最
后
一
个
位
置
find_last_not_of
查
找
不包
含
子
串
中
的
任
何
字
符
,
返
回
最
后
一
个
位
置
以
上
函
数
都
是
被
重载
了
4
次
,
以
下
是
以
find_first_of
函
数
为
例
说
明
他
们
的
参
数
,
其
他
函
数
和
其
参
数
一样
,
也
就
是说
总
共
有
24
个
函
数
:
size_type find_first_of(const basic_string& s, size_type pos = 0)
size_type find_first_of(const charT* s, size_type pos, size_type n)
size_type find_first_of(const charT* s, size_type pos = 0)
size_type find_first_of(charT c, size_type pos = 0)
所
有
的
查
找
函
数
都返
回
一
个
size_type
类
型
,
这
个返
回
值
一
般
都
是所
找
到
字
符
串的
位
置
,
如
果
没
有
找
到
,
则
返
回
string::npos
。
有一
点
需
要
特
别
注
意
,
所
有
和
string::npos
的
比
较
一
定
要用
string::size_type
来
使
用
,
不
要
直
接
使
用
int
或
者
unsigned int
等
类
型
。
其
实
string::npos
表
示
的
是
-1,
看看
头文
件
:
template <class _CharT, class _Traits, class _Alloc>
const basic_string<_CharT,_Traits,_Alloc>::size_type
basic_string<_CharT,_Traits,_Alloc>::npos
= basic_string<_CharT,_Traits,_Alloc>::size_type) -1;
find
和
rfind
都
还
比
较
容
易
理
解
,
一
个
是
正
向
匹配
,
一
个
是
逆
向
匹配
,
后
面
的
参
数
pos
都
是
用
来
指
定
起
始
查
找
位
置
。
对
于
find_first_of
和
find_last_of
就
不
是
那
么
好
理
解
。
find_first_of
是
给
定
一
个
要
查
找
的
字
符
集
,
找
到
这
个
字
符
集
中
任
何
一
个
字
符
所
在
字
符
串
中
第
一
个
位
置
。
或
许
看
一
个
例
子
更
容
易
明
白
。
有
这
样一
个
需
求
:
过
滤
一
行
开
头
和
结
尾
的
所
有
非
英
文
字
符
。
看看
用
string
如
何
实
现
:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string strinfo=" //*---Hello Word!......------";
string strset="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int first = strinfo.find_first_of(strset);
if(first == string::npos)
{
cout<<"not find any characters"<<endl;
return -1;
}
int last = strinfo.find_last_of(strset);
if(last == string::npos)
{
cout<<"not find any characters"<<endl;
return -1;
}
cout << strinfo.substr(first, last - first + 1)<<endl;
return 0;
}
这
里
把
所
有
的
英
文
字
母
大
小写
作
为
了
需
要
查
找
的
字
符
集
,
先
查
找
第
一
个
英
文
字
母
的
位
置
,
然
后
查
找
最
后
一
个
英
文
字
母
的
位
置
,
然
后
用
substr
来
的到
中
间
的
一
部
分
,
用于
输
出
结
果
。
下
面
就
是
其
结
果
:
Hello Word
前
面
的
符
号和后
面
的
符
号
都
没
有
了
。
像
这种
用
法
可
以用
来
查
找
分隔符
,
从
而
把
一
个
连
续
的
字
符
串
分割
成
为
几
部
分
,
达到
shell
命
令
中
的
awk
的
用
法
。
特
别
是
当
分隔符
有
多个
的
时
候
,
可
以一
次
指
定
。
例
如
有
这
样
的
需
求
:
张
三
|3456123,
湖
南
李
四
,4564234|
湖
北
王
小
二
, 4433253|
北
京
...
我
们
需
要以
"|" ","
为
分隔符
,
同
时
又要
过
滤
空
格
,
把
每
行
分
成
相
应
的
字
段
。
可
以
作
为
你
的
一
个
作
业
来
试试
,
要
求
代
码
简洁
。
1.3 string insert, replace, erase
了
解
了
string
的
操
作
符
,
查
找
函
数
和
substr
,
其
实
就
已
经
了
解
了
string
的
80%
的
操
作
了
。
insert
函
数
, replace
函
数
和
erase
函
数
在
使
用
起
来
相
对
简
单
。
下
面
以一
个
例
子
来
说
明
其
应用
。
string
只
是
提
供
了
按
照
位
置
和
区
间
的
replace
函
数
,
而
不
能
用一
个
string
字
串
来
替
换
指
定
string
中
的
另
一
个
字
串
。
这
里
写
一
个
函
数
来
实
现
这
个
功
能
:
void string_replace(string & strBig, const string & strsrc, const string &strdst)
{
string::size_type pos=0;
string::size_type srclen=strsrc.size();
string::size_type dstlen=strdst.size();
while( (pos=strBig.find(strsrc, pos)) != string::npos)
{
strBig.replace(pos, srclen, strdst);
pos += dstlen;
}
}
剩余11页未读,继续阅读
月小烟
- 粉丝: 27
- 资源: 296
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0