风衣. 2023-03-17 12:15 采纳率: 100%
浏览 33
已结题

一个复杂的c++题不会做

c++题目求解
题目描述
在这个挑战中,将字符串转换为由单个空格分隔的一系列单词(或字符序列),每个单词的长度与圆周率(π)的十进制表示的前 15 位相同:
3.14159265358979

如果一个字符串包含的字符多于 π 数字总和给出的总数,则丢弃未使用的字符,您将只使用构成 15 个单词所需的字符。

String = "HOWINEEDADRINKALCOHOLICINNATUREAFTERTHEHEAVYLECTURESINVOLVINGQUANTUMMECHANICSANDALLTHESECRETSOFTHEUNIVERSE"
Pi String = "HOW I NEED A DRINK ALCOHOLIC IN NATURE AFTER THE HEAVY LECTURES INVOLVING QUANTUM MECHANICS"
每个单词都有相同长度的π在相同的下标处?
"HOW" = 3, "I" = 1, "NEED" = 4, "A" = 1, "DRINK" = 5
"ALCOHOLIC" = 9, "IN" = 2, "NATURE" = 6, "AFTER" = 5
"THE" = 3, "HEAVY" = 5, "LECTURES" = 8, "INVOLVING" = 9
"QUANTUM" = 7, "MECHANICS" = 9
3.14159265358979
此外,如果一个字符串包含的字符少于 π 数字总和给出的总数量,在任何情况下,你必须尊重数字的序列来获得单词。

String = "FORALOOP"
Pi String = "FOR A LOOP"
每个单词都有相同长度的Pi在相同的下标处?
"FOR" = 3, "A" = 1, "LOOP" = 4
3.14
如果字符串中包含的字母与数字不完全匹配,在这种情况下,您将重复最后一个字母,直到单词具有正确的长度。

String = "CANIMAKEAGUESSNOW"
Pi String = "CAN I MAKE A GUESS NOWWWWWWW"
每个单词都有相同长度的Pi在相同的下标处?
"CAN" = 3, "I" = 1, "MAKE" = 4, "A" = 1, "GUESS" = 5, "NOW" = 3
3.14153 (Wrong!)
第6个单词“NOW”的长度(3)…
...与Pi(9)的第六位不匹配
最后一个字母“W”将被重复……
...直到单词的长度与数字匹配为止
"CAN" = 3, "I" = 1, "MAKE" = 4, "A" = 1, "GUESS" = 5, "NOWWWWWWW" = 9
3.14159 (Correct!)
如果给定字符串为空,则必须返回一个空字符串。

给定一个字符串 txt,实现一个函数,该函数返回根据上述说明格式化的相同字符串。

输入输出格式
输入格式
第一行有一个字符串;
输出格式
一行输出字符串,表示 Pilish 字符串,每个字符串单词用一个空格隔开。

输入输出样例1
输入
33314444
输出
333 1 4444
解释(可选)
3.14

输入输出样例2
输入
HOWINEEDADRINKALCOHOLICINNATUREAFTERTHEHEAVYLECTURESINVOLVINGQUANTUMMECHANICSANDALLTHESECRETSOFTHEUNIVERSE
输出
HOW I NEED A DRINK ALCOHOLIC IN NATURE AFTER THE HEAVY LECTURES INVOLVING QUANTUM MECHANICS
解释(可选)

"HOW" = 3, "I" = 1, "NEED" = 4, "A" = 1, "DRINK" = 5
"ALCOHOLIC" = 9, "IN" = 2, "NATURE" = 6, "AFTER" = 5
"THE" = 3, "HEAVY" = 5, "LECTURES" = 8, "INVOLVING" = 9
"QUANTUM" = 7, "MECHANICS" = 9
3.14159265358979
说明提示
在函数中不需要考虑将 π 的整数部分与小数部分分开的点:它出现在指令和示例中只是为了便于阅读。

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-03-17 13:11
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    这道题可以分为以下步骤:

    1. 将 π 的前 15 位提取出来作为单词的长度。

    2. 依据单词长度,将输入的字符串分割为一组单词。

    3. 输出分割后的单词,每个单词之间用空格隔开。

    对于步骤 1,我们可以使用 sprintf() 函数将 π 的前 15 位格式化成一个字符串,然后使用 strlen() 函数计算出字符串长度,即为单词的长度。

    对于步骤 2,我们可以使用循环将输入的字符串分割为一组单词,然后将单词保存到一个数组中。

    对于步骤 3,我们可以使用循环遍历单词数组,然后将每个单词输出到标准输出,并在每个单词之间输出一个空格。

    以下是一个可能的 C++ 实现:

    #include <iostream>
    #include <string>
    #include <cmath>
    
    using namespace std;
    
    const string PI = "314159265358979";
    
    int main() {
        string s;
        getline(cin, s);
    
        int n = s.length();
        int m = PI.length();
    
        int pos = 0; // 当前字符串位置
        for (int i = 0; i < m && pos < n; ++i) {
            int len = PI[i] - '0';
            if (pos + len > n) {
                len = n - pos; // 如果当前字符串剩余的长度小于 len,就使用当前剩余长度
            }
            string word = s.substr(pos, len); // 取出当前字符串中的一个单词
            cout << word << ' ';
            pos += len;
        }
    
        return 0;
    }
    
    
    

    此实现首先读入字符串,然后逐个字符读入 π 的前 15 个数字,并使用它们来确定每个单词的长度。然后使用 substr 函数在输入字符串中提取每个单词,并将其输出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 3月17日

悬赏问题

  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图