【问题标题】:Assigning an integer into index in char * pointer array将整数分配给 char * 指针数组中的索引
【发布时间】:2020-06-01 21:59:42
【问题描述】:

由于我没有提供足够的细节,所以重做我之前的问题。

我有一个字符指针数组char* token[100]。假设我有一个两位数,比如 33。

如何将此 int 分配到令牌数组中的索引中,这样当我打印出该令牌时,它会给我 33 而不是某种 ASCII 值?

char* token[100];
int num = 33;
//How do I assign num into a specific token index, like for example:
token[1] = num;
//When I print out that token index, I want 33 to be printed out
cout << token[1] << endl; // I want to have 33 be the result. Right now I have '!' as an output

【问题讨论】:

  • 打印前只转换回整数?
  • 首先您需要了解char* 是指向内存中某个位置的指针。您已将其设置为值 33,几乎可以肯定它不在程序的地址空间内。然后您尝试读取一个您错误地认为存储在该内存位置的字符串并将其写入标准输出。
  • 您的意思是要打印出33 而不是42
  • @John 是的,抱歉,打错了
  • 您知道char *[]char [] 之间的区别吗?你知道charint 之间的区别吗?你知道什么是数组吗?我们提出这些问题是为了引导您获得最佳资源。我们需要衡量您的理解程度。

标签: c++ arrays char c-strings


【解决方案1】:

你的意思好像是这样的

#include <iostream>
#include <string>
#include <cstring>

int main() 
{
    char * token[100] = {};
    int num = 33;

    std::string s= std::to_string( num );

    token[1] = new char[s.size() + 1];

    std::strcpy( token[1], s.c_str() );

    std::cout << "token[1] = " << token[1] << '\n';

    delete [] token[1];

    return 0;
}

程序输出是

token[1] = 33

如果不允许使用 C++ 容器和函数,那么程序可以如下所示

#include <iostream>
#include <cstdio>
#include <cstring>

int main() 
{
    char * token[100] = {};
    int num = 33;

    char buffer[12];

    std::sprintf( buffer, "%d", num );

    token[1] = new char[std::strlen( buffer ) + 1];

    std::strcpy( token[1], buffer );

    std::cout << "token[1] = " << token[1] << '\n';

    delete [] token[1];

    return 0;
}

【讨论】:

  • 啊,谢谢!这就是我的意思。但是,我的老师不允许我使用 std:: 命令,那么有没有办法不使用这些命令?
  • 处理所有 32 位 intchar buffer[12]; 更有意义。
【解决方案2】:

我从 cmets 确信您需要一个整数类型的数组。如果我们进一步澄清为什么这需要是一个 char 数组,我会更新我的答案,但从所有可用信息来看,您似乎真的想要一个整数类型的数组。

#include <iostream>

int main(int argc, char** argv)
{
    int token[100] = {};
    int num = 33;

    token[1] = num;

    std::cout << token[1] << std::endl;

    return 0;
}

【讨论】:

  • 这需要是一个 char 数组,因为我正在读取这样的等式 (3 + 34 x 7),并且我基本上需要将每个数字都放在自己的数组中,例如:token[3] [+][34][x][7].
  • 如果您的等式是3 + 256char 数组中将存储哪些标记?一个 char 通常只有 8 位,因此如果您尝试将其存储为单个 char,则 256 会溢出。
  • 好吧,也许我不完全理解字符,但我认为 256 将被视为字符串并且只是令牌[256]
  • @madaniloff 你的程序的输入和输出是什么?你需要求解输入的方程吗?因为等式 3 + 34 x 7 将存储为字符数组 {3, 43, 34, 120, 7}。将其存储在数组中后,如何分辨chars 中哪些是运算符,哪些是数字?
  • 基本上我从一个字符中获取用户输入,因此,例如,输入将是 input[3][+][34][x][7]。如果数字是单个数字或运算符,我只是将其分配给令牌数组,例如 token[i] = input[i]。
猜你喜欢
  • 2018-10-06
  • 2011-04-02
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多