【发布时间】:2021-07-05 00:08:07
【问题描述】:
在您提前阅读或尝试提供帮助之前,这个问题与我的作业有关,因此对这个问题的要求将非常具体。
我正在编写一个代码,它接受 0 到 511 之间的用户输入并将其转换为二进制数。然后程序会将二进制数中的所有 1 替换为 T,并将数字中的所有 0 替换为 H。然后它将结果(带有 H 和 T 替换的二进制数)打印为 3*3 矩阵。
这是想要的输出(不是我拥有的,而是我想要的):
Enter a number between 0 and 511: 299
The binary number is: 100101011
The matrix is:
THH
THT
HTT
我觉得第一个问题要简单一些,但是我的 H 和 T 数组的打印输出都打印在一行中,我想不出一种方法一次打印 3 个值。我尝试在 i = 3 时添加换行符,但这似乎不起作用。我的代码的第二个问题是,由于某种奇怪的原因,我上面示例中的第一个 H 或 0 显示为 TTH THT HTT 而它应该是 THH THT HTT
虽然这是 C++ 语言,但我学到的是 C 风格的语法(没有 std:: 之类的代码或类似的东西,因为我还没有学过,也不会理解)已经学习了基本的数组、循环和函数。
#include <iostream>
using namespace std;
int main(){
int arr[10];
string stringArr[10];
int input, i;
cout<<"Enter a number between 0 and 511: ";
cin>> input;
for(i = 0; input > 0; i++){
arr[i] = (input % 2);
input = input / 2;
}
cout<<"The binary number is: ";
for(i = i - 1; i >= 0; i--){
cout<<arr[i];
}
for(int i = 0; i < sizeof(arr)/sizeof(arr[10]); i++){
if(arr[i] == 1){
stringArr[i] = "T";
}
else if(arr[i] == 0){
stringArr[i] = "H";
}
}
cout<<" "<< endl;
for(int i = 0; i < sizeof(stringArr)/sizeof(stringArr[10]); i++){
cout<<stringArr[i]<< " ";
}
}
【问题讨论】:
-
没有 std:: 之类的代码或类似的东西,因为我还没有学过,我也不会理解它 -- 你使用的是
std::string。鉴于此,也许您应该用 C 编写它并使用printf而不是 C++。 C++ 解决方案只是std::bitset<9>和两行for循环。 -
@PaulMcKenzie 我实际上不确定这种语言到底是什么。我上的课老师说是C++,但是我在网上看到的C++资源有这个std::东西,我不知道它们是什么,因为我没有在课堂上学过。这就是我将 C++ 和免责声明放在那里的原因
-
@G33KTR0N 使用命名空间标准;应该是您已经在使用 C++ 标准库的提示
-
如果语法让您感到困惑,请查看this post,您会发现 C++ 书籍列表选择任何初学者书籍并开始阅读。这将回答您的大部分问题
-
@G33KTR0N 至于你对混淆的担忧,here is your program using the "std" stuff。
bitset是一个存储位的类,正如描述所述。要设置位集,您 -- 使用=设置它。然后得到你设置的字符串版本——你调用to_string。所以说实话,相比使用bitset的代码,初学者很可能会对您的代码感到困惑。