前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串分割—istringstream(C++)

字符串分割—istringstream(C++)

作者头像
LonelyEnderman
发布2022-10-27 13:58:40
1.3K0
发布2022-10-27 13:58:40
举报

前言

算法上机课布置了这么个题

输入一段英文句子,要求提取其中所有单词,提取后的单词不能有空格和标点符号

思路

首先想到直接遍历整个字符串,遇到空格和标点就把单词输出,但是写起来比较麻烦,而且不能实现单词的存储(虽然题目没有要求存储)。 在网上搜索其他大佬的代码时发现了istringstream这个东西,这是C++的一个输入输出控制类,作用是将字符串按照空格分割,写起来非常的简洁,例如istringstream cut(string);就是创建了一个cut对象,里面存的是string按照空格分割好的内容。 剩下的就很简单了,题目要求标点也作为分隔符,那就先遍历一遍把出现的标点全部换成空格然后用istringstream分割即可,如果要存储分割后的每个单词就用一个字符串数组,也可以顺便实现增删改查(非必须) 值得注意的是,要用istringstream需要包含#include <sstream>头文件

代码

代码语言:javascript
复制
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
    string str;
    string words[10005];
    cout << "输入要分割的文本:" << endl;
    getline(cin, str);
    //将标点替换为空格
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] == ',' || str[i] == '.' || str[i] == '!' || str[i] == '?')
        {
            str[i] = ' ';
        }       
    }
    //istringstreama分割字符串
    istringstream cut(str);
    int index = 0;
    cout << "分割后的所有单词:" << endl;
    //用string数组来存储每一个单词
    while (cut >> words[index])
    {
        cout << "[" << words[index++] << "] ";
    }   
    cout << endl << "----------------------------" << endl;
    cout <<"共计"<<index<<"个单词," << "第2个单词为:" << words[1] << endl;
    system("pause");
    return 0;
}

运行效果

file
file
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-4-05 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 思路
  • 代码
  • 运行效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档