【问题标题】:Decimal to binary, then convert to string matrix十进制转二进制,再转成字符串矩阵
【发布时间】: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&lt;9&gt; 和两行 for 循环。
  • @PaulMcKenzie 我实际上不确定这种语言到底是什么。我上的课老师说是C++,但是我在网上看到的C++资源有这个std::东西,我不知道它们是什么,因为我没有在课堂上学过。这就是我将 C++ 和免责声明放在那里的原因
  • @G33KTR0N 使用命名空间标准;应该是您已经在使用 C++ 标准库的提示
  • 如果语法让您感到困惑,请查看this post,您会发现 C++ 书籍列表选择任何初学者书籍并开始阅读。这将回答您的大部分问题
  • @G33KTR0N 至于你对混淆的担忧,here is your program using the "std" stuffbitset 是一个存储位的类,正如描述所述。要设置位集,您 -- 使用= 设置它。然后得到你设置的字符串版本——你调用to_string。所以说实话,相比使用 bitset 的代码,初学者很可能会对您的代码感到困惑。

标签: c++ arrays string loops


【解决方案1】:

关于三行的格式,您可以执行以下操作:

        if (i%3 == 0 && i != 0) cout << std::endl;
        cout<<stringArr[i]<< " ";

% 是返回整数除法提示的模运算符,你想每三个添加一个结束行(跳过,我假设是第一个)

std::endl 正在添加流的结束行(在这种情况下为标准输出),它也会刷新流。可以使用 '\n' 代替添加不刷新的行。

请注意,在您的第二个问题上,您正在以不同的方向编写两个输出。二进制数从末尾打印到开头(像这样循环 (i = i - 1; i >= 0; i--) ),字符串从 0 循环打印到数组末尾。

没有被问到,但我需要指出来

您将std::string 用作字符串数组,在您的情况下确实不需要。您可以简单地使用单个 std::string 并向其添加单个字符(文字字符串使用双引号,例如“foo”字符单引号,例如'H')。

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 2017-03-22
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2010-11-17
    • 2020-03-22
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多