C++ 初学者不适合 'operator-'
C++ beginner no match for 'operator-'
我 运行 遇到了关于我的 c++ 实验室介绍之一的问题。我已将说明发布到此实验室和下面的代码。我想指出的是,模式 B 必须显示在模式 A 旁边(完全如图所示),而不是在它下面。
当我尝试构建此代码时,我在 b = b-y 行收到 '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;
}
你不能在 C++ 中 'subtract' 字符串。字符串没有“-”运算符。
一种方法是使用 string.substring() 获取原始字符串的 'shortened' 版本:
b=b.substr(0, b.size()-1); // copy all but last character of b to b
我的理解方式:
#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;
}
classstd::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
我 运行 遇到了关于我的 c++ 实验室介绍之一的问题。我已将说明发布到此实验室和下面的代码。我想指出的是,模式 B 必须显示在模式 A 旁边(完全如图所示),而不是在它下面。
当我尝试构建此代码时,我在 b = b-y 行收到 '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;
}
你不能在 C++ 中 'subtract' 字符串。字符串没有“-”运算符。
一种方法是使用 string.substring() 获取原始字符串的 'shortened' 版本:
b=b.substr(0, b.size()-1); // copy all but last character of b to b
我的理解方式:
#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;
}
classstd::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