C ++比较字符串的连续整数

时间:2017-09-30 03:00:24

标签: c++ string algorithm if-statement

我正在编写一个程序来确定一组给定的整数是增加,减少还是两者都没有。

例如,字符串“123456”将增加,“54321”正在减少。

我的解决方案:

string my_str = "12345";

f = my_str.at(0);
s = my_str.at(1);
t = my_str.at(2);
l = my_str.at(3);
p = my_str.at(4);

if(f<=s<=t<=l<=p){

cout << "The string is increasing" << endl;

}

 if(f>=s>=t>=l>=p){

cout << "The string is decreasing" << endl;

}

现在我不确定这是否可行,但我理解这个概念我在将这个问题放入C ++代码时遇到了麻烦。那么这是最好的方式吗?

编辑:我理解这段代码是完整的,它应该是一个概括,以帮助我更好地理解。无论输入如何,我发布的小代码打印出来都增加了,并且它没有读取my_str输入,我原以为它只会在运行程序后输出增加或减少。

2 个答案:

答案 0 :(得分:4)

您需要概括您的方法。我的意思是如果你有一个长度为20的字符串?你会逐一记下所有相邻的所需关系以增加序列吗?当然不是,因为那是一个重复的任务,我们要做的工作就是循环!

以下是一个例子:

#include <iostream>
#include <string>

int main()
{
    std::string str = "543621";
    bool increasing = true;
    for(size_t i = 0; i < str.size() - 1; ++i)
        if(!(str[i] <= str[i + 1])) {
            increasing = false;
            break;
        }
    std::cout << "Increasing: " << increasing << std::endl;

    bool decreasing = true;
    for(size_t i = 0; i < str.size() - 1; ++i)
        if(!(str[i] >= str[i + 1])) {
            decreasing = false;
            break;
        }
    std::cout << "Decreasing: " << decreasing << std::endl;

    if(!increasing && !decreasing)
        std::cout << "Neutral" << std::endl;
}

输出:

Increasing: 0
Decreasing: 0
Neutral

该示例首先检查&#34;增加&#34;字符串,然后为&#34;减少&#34;这些都不是真的,它假定它是中立的(两者都不是)。

当然,您可以优化此示例以停止检查&#34;减少&#34;,如果{for循环后increasing设置为true,但我决定保持简单示范目的。

答案 1 :(得分:0)

您只需1个周期即可管理它:

#include <iostream>
#include <string>

int main()
{
    std::string str = "543621";
    bool increasing = true;
    bool decreasing = true;
    for(size_t i = 0; i < str.size() - 1 && (increasing || decreasing); ++i)
    {
        if(str[i] > str[i + 1]) {
            increasing = false;
        }
        if(str[i] < str[i + 1]) {
            decreasing = false;
        }
    }
    std::cout << "Increasing: " << increasing << std::endl;
    std::cout << "Decreasing: " << decreasing << std::endl;

    if(!increasing && !decreasing)
        std::cout << "Neutral" << std::endl;
}