【问题标题】:C++ beginner no match for 'operator-'C ++初学者不匹配'operator-'
【发布时间】:2017-03-01 11:22:45
【问题描述】:

我在 C++ 实验室介绍中遇到了一个问题。我已经在下面发布了这个实验室的说明和我的代码。我想指出,图案 B 必须显示在图案 A 旁边(如图所示),而不是在其下方。

当我尝试构建此代码时,我在行 b = b-y 上收到错误 no match for 'operator-'。有没有一种简单的方法来减少字符串中的符号?说明声明要为模式 B 使用第二个循环,但我不确定从哪里开始。我非常感谢任何能引导我朝着正确方向完成这项任务的建议。谢谢。

#include <iostream>
#include <string>

using namespace std;

int main()
{

    string a = "*";
    string b = "**********";
    string y = "*";


    for (int i=0; i <= 9; i++) {
        cout << a << "       " << b << "\n";
        a = a + y;
        b = b - y;
    }


    return 0;
}

【问题讨论】:

  • 据我所知,您可以使用+ 连接字符串,但不能使用- 删除部分
  • 你可以使用erase()函数来“递减”字符串。
  • 请不要试图猜测 C++ 语法。请阅读您的书籍和文档。
  • 仔细阅读作业。你应该使用一个循环来显示模式 A,和另一个循环来显示模式 B。
  • 大量可用的方法:.resize( ) 也可以。或.pop_back( )。这些都不是内容敏感的,但它们会删除任何内容。

标签: c++ loops for-loop string-operations


【解决方案1】:

我的理解方式:

#include <iostream>   
using namespace std;

int main()
{
    int aCount = 1;
    int bCount = 10;
    while(bCount > 0) 
    {
        // Loop over A
        for (int i = 0; i < aCount; i++)
        {
            cout << '+';
        }

        // Output a few tabs to separate the samples
        cout << "\t\t\t\t";

        // Loop over B
        for (int i = 0; i < bCount; i++)
        {
            cout << '+';
        }

        // Go to next line
        cout << endl;

        aCount++;
        bCount--;
    }

    return 0;
}

【讨论】:

  • 这对我帮助很大。当我运行此代码时,模式 b 的最后 3 行不符合要求。我似乎无法理解为什么会这样。
  • 这是因为制表符的行为方式 - 只需输出 20-aCount 空格或其他东西来对齐 B 的开头。
  • 我通过替换线 cout 7) cout
  • 感谢@Useless 看起来更干净。
  • 是的,按照Useless所说的去做。我实际上并没有测试这段代码 :) 另外,如果我对分配的解释是错误的,可以先打印模式 A 的所有行,然后再打印模式 B,但这需要使用依赖于操作系统的控制台函数,我怀疑是老师的意思
【解决方案2】:

您不能在 C++ 中“减去”字符串。字符串没有“-”运算符。

一种方法是使用 string.substring() 来获取原始字符串的“缩短”版本:

b=b.substr(0, b.size()-1); // copy all but last character of b to b

【讨论】:

  • 从C++11开始,string也有了pop_back
【解决方案3】:

std::string 类中没有运算符 operator -。你应该改用erase这个方法,

但是,如果您为每一行输出字符串,则不会有两个循环一个接一个。

这个任务的意思好像是这样的

#include <iostream>
#include <iomanip>

int main() 
{
    while ( true )
    {
        const char c1 = '+';
        const char c2 = ' ';

        std::cout << "Enter a non-negative number (0 - exit): ";

        unsigned int n;

        if ( not ( std::cin >> n ) or ( n == 0 ) ) break;

        std::cout << '\n';

        for ( unsigned int i = 1; i <= n; i++ )
        {
            for ( unsigned int j = 1; j <= i; j++ )
            {
                std::cout << c1;
            }

            std::cout << std::setw( 2 * n - i ) << std::setfill( c2 ) 
                      << std::right << c2;

            for ( unsigned int j = n - i + 1; j != 0; j-- )
            {
                std::cout << c1;
            }

            std::cout << '\n';
        }

        std::cout << std::endl;
    }

    return 0;
}

程序输出可能看起来像

Enter a non-negative number (0 - exit): 10

+                   ++++++++++
++                  +++++++++
+++                 ++++++++
++++                +++++++
+++++               ++++++
++++++              +++++
+++++++             ++++
++++++++            +++
+++++++++           ++
++++++++++          +

Enter a non-negative number (0 - exit): 9

+                 +++++++++
++                ++++++++
+++               +++++++
++++              ++++++
+++++             +++++
++++++            ++++
+++++++           +++
++++++++          ++
+++++++++         +

Enter a non-negative number (0 - exit): 8

+               ++++++++
++              +++++++
+++             ++++++
++++            +++++
+++++           ++++
++++++          +++
+++++++         ++
++++++++        +

Enter a non-negative number (0 - exit): 7

+             +++++++
++            ++++++
+++           +++++
++++          ++++
+++++         +++
++++++        ++
+++++++       +

Enter a non-negative number (0 - exit): 6

+           ++++++
++          +++++
+++         ++++
++++        +++
+++++       ++
++++++      +

Enter a non-negative number (0 - exit): 5

+         +++++
++        ++++
+++       +++
++++      ++
+++++     +

Enter a non-negative number (0 - exit): 4

+       ++++
++      +++
+++     ++
++++    +

Enter a non-negative number (0 - exit): 3

+     +++
++    ++
+++   +

Enter a non-negative number (0 - exit): 2

+   ++
++  +

Enter a non-negative number (0 - exit): 1

+ +

Enter a non-negative number (0 - exit): 0

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2021-05-21
    • 2011-12-10
    • 2013-07-31
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多