有没有办法在不使用嵌套循环的情况下打印以下模式?

时间:2021-05-04 13:58:10

标签: c++ string

此图像包含图案。 '*' 被减去,'-' 被添加。

我很困惑我不允许使用嵌套循环。我不知道为什么它让我感到困惑。

#include <iostream>
using namespace std;
int main(){
    string a="*";
    for (int i=0; i<4; i++){
        cout<<a<<endl;
        a=a+"*";
    }
}

我尝试使用此代码来测试打印成功的模式。以下是它制作的图案。

*
**
***
****

这看起来不错,因为 C++ 允许 a=a+"*" 将字符串添加到字符串数据中。但我需要的模式是

****
***-
**--
*---

其中可以添加“-”,但如何减去“*”。我不能做a=a-'*'。我需要使用字符串的索引吗?但只允许一个循环。

3 个答案:

答案 0 :(得分:2)

for (int i=0; i<4;  i++){
    cout << string((4-i), '*') << string(i, '-')<< endl;
}

答案 1 :(得分:0)

您可以更改(覆盖)字符串中的字符。

#include <iostream>
#include <string>
using namespace std;
int main(){
    const int n=4;
    string a(n,'*');
    for (int i=0; i<n; i++){
        cout<<a<<endl;
        a[n-i-1]='-';
    }
}

答案 2 :(得分:0)

  • 首先创建一个长度为 4 的字符串,其中只有 *。这使用一个循环(或不使用;这取决于 4 是否始终为 4,还是可变的)
  • 再做一个循环,从 3 倒数到 0,然后用 - 替换计数的字符。这是另一个循环,但它不是嵌套循环。在进行替换之前,为循环的每次迭代输出字符串。

对于 std::string s,您可以使用 s[i]='-'; 替换字符串中的单个字符,如果您知道 i 在字符串的长度内字符串。

(基本上是@MikeCAT 所说的)