我正在编写一个程序来确定一组给定的整数是增加,减少还是两者都没有。
例如,字符串“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输入,我原以为它只会在运行程序后输出增加或减少。
答案 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;
}