#1洛谷题目分享(B2120 单词的长度)

B2120 单词的长度

目录

B2120 单词的长度

1.题目描述

输入格式

输出格式

样例 #1

样例输入 #1

样例输出 #1

2.代码

3.知识点:

字符串流(String Stream, istringstream):

3.1将句子整体输入:

3.2逆序输出:

4.注意


1.题目描述

  • 输入一行单词序列,相邻单词之间由 $1$ 个或多个空格间隔,请对应地计算各个单词的长度。

  • 注意:如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。

输入格式

  • 一行单词序列,最少 $1$ 个单词,最多 $300$ 个单词,单词之间用至少 $1$ 个空格间隔。单词序列总长度不超过 $1000$。

输出格式

  • 依次输出对应单词的长度,之间以逗号间隔。

样例 #1

样例输入 #1

She was born in 1990-01-02  and  from Beijing city.

样例输出 #1

3,3,4,2,10,3,4,7,5

2.代码

#include <iostream>
#include <sstream> // 包含istringstream的头文件
#include <vector> // 包含vector的头文件
using namespace std;
​
int main()
{
    string input; // 声明一个string类型的变量用于存储输入的字符串
    getline(cin, input); // 从标准输入读取一行字符串,并存储到input中
​
    istringstream iss(input); // 创建一个istringstream对象,将input字符串包装成输入流
​
    string word; // 声明一个string类型的变量用于存储单词
    vector<int> word_lengths; // 声明一个vector,用于存储每个单词的长度
​
    // 逐个读取单词并计算长度
    while (iss >> word)
    {
        word_lengths.push_back(word.length()); // 将当前单词的长度添加到word_lengths向量中
    }
​
    // 输出每个单词的长度,以逗号分隔
    for (size_t i = 0; i < word_lengths.size(); ++i)
    {
        if (i != word_lengths.size() - 1)
        {
            cout << word_lengths[i] << ","; // 输出当前单词的长度,并跟随逗号
        }
        else
        {
            cout << word_lengths[i]; // 如果是最后一个单词,则只输出长度,不跟随逗号
        }
    }
​
    return 0;
}

这个代码的重点在于:

  1. 读取用户输入的句子,并将其存储在字符串变量input中。

  2. 使用std::istringstream将输入的字符串input转换为输入流,以便逐个读取其中的单词。

  3. 逐个读取单词,并计算每个单词的长度,将长度存储在std::vector<int>类型的向量word_lengths中。

  4. 使用范围循环遍历word_lengths向量,输出每个单词的长度。在输出过程中,通过判断当前单词是否为最后一个,决定是否输出逗号分隔。

总体来说,这段代码的重点是对输入字符串的处理,包括读取和分割单词,并最终输出单词的长度。

3.知识点:

字符串流(String Stream, istringstream):

  • 在C++中,istringstream是输入流的一个类型,它允许你将字符串视为输入源,就像从文件或标准输入流中读取一样。你可以使用>>运算符从istringstream中提取数据,就像从cin中读取一样。它非常适合处理格式化的字符串输入。

3.1将句子整体输入

例如,如果你想从用户那里获取一个句子,你可以创建一个istringstream,并将用户输入的字符串赋值给它,然后使用>>从流中读取单词:

#include <iostream>
#include <sstream>
#include <string>
​
int main() {
    string input;
    cout << "Enter a sentence: ";
    getline(cin, input); // 获取用户输入的句子
​
    istringstream iss(input); // 创建一个输入流,包含用户输入的句子
    string word;
​
    iss >> word; // 从流中读取单词
    while (iss >> word) { // 当还有更多单词时,继续读取
        cout << word << " ";
    }
​
    return 0;
}

3.2逆序输出

要逆序输出单词,我们可以使用std::reverse_iterator,它允许我们在容器的末尾开始迭代:

// ...(上面的代码继续)
​
// 使用reverse_iterator逆序输出单词
for (auto it = words.rbegin(); it != words.rend(); ++it) 
{
    cout << *it << " ";
}

完整例子

#include <iostream> // 包含输入输出流
#include <sstream> // 包含字符串流
#include <string> // 包含字符串处理函数
#include <vector> // 包含向量容器
#include <algorithm> // 包含逆序迭代器
​
int main() {
    std::string input; // 声明一个string类型的变量用于存储输入的句子
    std::cout << "Enter a sentence: "; // 提示用户输入句子
    std::getline(std::cin, input); // 从标准输入读取一行句子,并存储到input中
​
    std::istringstream iss(input); // 创建一个istringstream对象,将input字符串包装成输入流
​
    std::string word; // 声明一个string类型的变量用于存储单词
    std::vector<std::string> words; // 声明一个vector,用于存储每个单词
​
    // 逐个读取单词并存储到vector中
    while (iss >> word) {
        words.push_back(word); // 将当前单词添加到words向量中
    }
​
    // 使用reverse_iterator逆序输出单词
    for (std::vector<std::string>::reverse_iterator it = words.rbegin(); it != words.rend(); ++it) { // 从逆序迭代器rbegin()开始,到逆序迭代器rend()结束
        std::cout << *it << " "; // 输出当前单词,并跟随空格
    }
​
    return 0; // 返回0表示程序正常结束
}
 

这个程序会先获取用户输入的句子,然后读取每个单词并存储在words向量中,最后逆序输出这些单词。

4.注意

本人使用的是dev-c++较旧的版本,当中部分代码可能在你的版本下可能有误。

这是高版本下的代码供大家参考。

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
​
int main() {
    std::string input;
    std::cout << "Enter a sentence: ";
    std::getline(std::cin, input); // 从标准输入读取一行字符串,并存储到input中
​
    std::istringstream iss(input); // 创建一个istringstream对象,将input字符串包装成输入流
    std::string word;
    std::vector<int> word_lengths; // 声明一个vector,用于存储每个单词的长度
​
    // 使用范围循环读取单词并计算长度
    while (iss >> word) {
        word_lengths.push_back(word.length()); // 将当前单词的长度添加到word_lengths向量中
    }
​
    // 使用范围循环输出每个单词的长度,以逗号分隔
    for (size_t i = 0; i < word_lengths.size(); ++i) {
        std::cout << word_lengths[i]; // 输出当前单词的长度
        if (i != word_lengths.size() - 1) { // 如果不是最后一个单词,则输出逗号
            std::cout << ",";
        }
    }
​
    return 0;
}
​

这是洛谷上的题B2120 单词的长度,这是本人的学习记录罢了,都是非常基础的题分享给大家,做做参考。如果有错误的地方请大家一定要告知本人。再次表示感谢,如果对大家有帮助的话,希望大家点点赞,关注关注。此后会不断的更新。

  • 48
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值