c++字符串与复杂输入处理

string字符串

分类

C风格字符串:以 '\0' 结尾的 char 数组。

c++风格 string:STL中提供的字符串类,进行了封装。

在ACM中,在不配合容器等的使用中 ,推荐使用C风格字符串,其操作更灵活。

字符串数字转为数字型

很多时候都会遇到将字符串作为输入转换为数值或者把数值转为字符串的情况。

有如下几种解决方案

  1. 使用中的函数

    • atof(char *str) 转译C风格字符串str为浮点值

    • atoi(char *str) 、atol(char *str) atoll(char *str) (C++11) 转译C风格字符串str为整数值(int、 long、long long)

    上述函数取尽可能长的符合要求的字符串

  2. 使用中的函数

    • sscanf(char *buffer, char *format, ...) 以buffer为源,进行格式化输入

    • sprintf(char *buffer, char *format, ...) 格式化输出到buffer

  3. 使用
    stringstream strin(str) str为C风格字符串或string,可以使用形如strin<<a; strin>>b;的方式来向str中输入或输出

    istringstream为只读,ostringstream为只写

基本操作

  1. 创建

    string str = "12345abcd";
    string str(c_str); //c_str为一个C风格字符串
    
  2. 常用操作

    str[n] 			//读写下标为n的字符
    str.c_str() 	//返回str对应的只读C风格字符串
    str.data() 		//返回指向str中字符串首地址的指针
    
    str.begin() str.end() str.rbegin() str.rend() //返回迭代器
        
    str.empty() 	//检查字符串是否为空
    str.size() 		//返回字符数
    str.length() 	//返回字符数
        
    str.clear //清除内容
        
    str.push_back(ch) //后附"字符"ch到结尾
        
    str += str1 //后附string str1到str的结尾
    str+str1 //返回str和str1首尾连接后产生的string
    

    string s, s1;
    s = "abcdefg";
    
    s.size();
    s.at(n);   ///读写下标为n的字符
    
    s.find(s1, 0); //从前往后, 从第0个开始查找
    s.rfind(s1);	//从后往前
    
    s.replace(0, 3, s2);   //把从0开始的3个字符替换为s2(s2可以不是3个字符)
    
    s.compare(s1);    //相等返回0,s>s1返回1,s<s1返回-1
    
    s.substr(0, 5);  //从0开始截取5个字符
    
    s.insert(0, s1);   //在0的位置后面插入s1
    
    s.erase(0, 4);  //从0开始删除4个字符
    
    

复杂输入处理

无结束标志的数据输入

通过判断是否读到EOF来决定是否停止输入

  • scanf()==EOF

  • getchar()==EOF

  • cin==false

while(scanf("%d",&a)!=EOF)
while(ch=getchar()&&ch!=EOF)
while(cin>>a)

整行输入

cin.getline(str, length);
//str是一个char数组或string,用于存储输入结果。
//length用于限制最长输入长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[小G]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值