【问题标题】:Changing int array to char array将 int 数组更改为 char 数组
【发布时间】:2017-02-19 10:57:51
【问题描述】:

大家好,我在各种情况下都难以运行某些代码。我有代码可以找到数组中所有数字中有多少个素数,乘以它需要多长时间,并打印出有多少个素数。这一切都很好,但是我需要运行相同的代码,但使用 char 数组。这就是问题所在。这是代码,带有一个整数数组:

#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;

static const int N = 1000;

int main()
{
    int i, a[N];

    clock_t start = clock();

    for (i = 2; i < N; i++) a[i] = i;
    for (i = 2; i < N; i++)
        if (a[i])
            for (int j = i; j*i < N; j++) a[i*j] = 0;

    start = clock() - start;

    int primes = 0;
    for (i = 2; i < N; i++) {
        if (a[i]) {
            primes++;
            cout << " " << i;
            if (primes % 10 == 0)
                cout << "\n";
        }
    }
    printf("\nIt took %d clicks (%f seconds) to find all prime numbers.\n", start, ((float)start) / CLOCKS_PER_SEC);
    cout << "The number of primes out of " << N << " integers is " << primes << endl;
    return 0;
}

当我简单地将数组的“int”替换为“char”,并将“N”设置为 10 或 100 之类的值时,它工作得很好,除了素数的外观。任何更高的东西都没有打印出来。我知道这并不像将“int”更改为“char”那么简单,但我对这个问题感到绝望。没有帮助我需要再次执行此操作,但将数组更改为 bool 类型(这对我来说也没有多大意义。)

任何类型的洞察力或简单的解决方案都会很棒。在此期间,我会继续寻找一些东西。谢谢!

【问题讨论】:

  • 无法复制。与 char 数组一起工作正常(尽管有一个明显但无害的错误)。
  • 请问您试用时做了什么?您只是将 'int i, a[N]' 替换为 'char i, a[N]' 还是还有更多内容?我很迷茫。
  • a[i] 的最大值是 127 还是 255,这取决于 char 是带符号的还是无符号的。因此,如果您将N 设置得高于此值,您将为超过该限制的所有元素分配无效值。
  • 不,因为唯一需要改变的是数组的类型,我为什么要把i变成char?这毫无意义,无论如何。 int i; char a[N];。就是这样。
  • 好的,感谢所有帮助人员,是的@Sam Varshavchik,这没有任何意义,不知道我为什么要在那棵树上吠叫。现在一切正常。

标签: c++ arrays char int type-conversion


【解决方案1】:

问题是您将i 存储到a[i] 中。当achar数组时,一个元素的最大值是127(如果char默认为signed)或255(如果是unsigned),假设典型系统有8个位字节。如果已签名,溢出会导致实现定义的行为;如果它是无符号的,溢出环绕模 256

您唯一关心的是元素的值是零还是非零,因此无需在其中放入不同的值。只需将它们全部初始化为1

for (i = 2; i < N; i++) a[i] = 1;

当您将其更改为布尔值时,这也将起作用。

【讨论】:

  • 感谢您的澄清!设法使它工作:)
猜你喜欢
  • 1970-01-01
  • 2020-12-15
  • 2011-11-09
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
相关资源
最近更新 更多