正在检查C++中字符串的先前元素

Checking previous elements of string in C++

本文关键字:元素 字符串 检查 C++      更新时间:2023-10-16
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string a;
    cin >> a;
    int index = a.find('?');

    if(a[index]-1==3)
    {
        if(a[index]-2==3)
        {
            cout << "cool" << endl;
        }
    }
    return 0;
}

我迄今为止的代码。我正在做一个在线挑战,这是文本(由我自己翻译成我的母语(。

你输入一个给定的数字"N",你的数字会有多长。然后你输入N个数字,数字中有一个"?"。

因此,我们面临的挑战是找到我们是否能形成一个"酷"的数字。如果一个幸运数字连续包含至少2个2(如"35225"(、至少3个3(如"353333"(、连续包含至少5个5(如"55555237"(、或至少7个7(如"7777777777"(或以上任意组合(如"333522227"(,则称为"酷"。

我的工作是编写一个程序,读取由数字2、3、5和7以及问号(?(组成的字符串S,并输出是否可以将S中的问号替换为数字2、3.5和7,以获得一个很酷的数字(每个问号只能替换为一个数字(。

如果输入字符串可以变成一个很酷的数字,程序应该输出"很酷",否则应该输出"无聊"(为了清晰起见,引用引号(。

示例:输入

8
233?5757

输出

cool

输入

10
57?5?757?3

输出

boring

欢迎任何建议!

a[index - 1]访问字符串中的前一个字符。

很多东西:

cin >> a;

不会检查你是否真的读取了一个变量。。。我建议:

if (cin >> a) 
{
    // use a...
}

下一步。。。

int index = a.find('?');
if(a[index]-1==3)

这里,它应该是a[index - 1],但只有在index > 0的情况下才有效。正在尝试访问元素<0具有未定义的行为-基本上意味着您将得到垃圾结果或崩溃。如果你使用a.at(index - 1),如果你的代码创建了一个无效的索引,编译器会抛出一个异常——这要安全得多:然后你就可以找出原因并修复你的代码。

其次,字符存储在ASCII表示中。要获得ASCII数字3,您需要在程序中编码"3":a[index - 1] == '3'

更普遍地说,回答这个问题的最快方法是从右到左扫描:如果你看到一个数字,那么检查该数字是否启动了同一数字的其他实例的"酷"序列或"?"s。如果你一直扫描,但不能完成一个很酷的序列,你可以考虑不匹配的字符,添加一个计数"?"s当你在字符串中向左后退时,一旦你到达非"?"的字符串的开头您可以向前扫描到新字符。这一切都有点棘手,但将是最有效的解决方案。。。。