当前位置: 首页 > 知识库问答 >
问题:

C#-使用字符串字符填充数组无法正常工作

葛深
2023-03-14

我有一个

int[,] map = int[100, 100];

String mapString;

MapString只是包含大量的数字(除了数字没有其他字符)。

现在我想用mapString的第一个字符分配数组中的第一个值(map[0,0]),用mapString的第二个字符分配第二个值(map[0,1]),依此类推。我使用以下代码:

int currentposition = 0;
for (int x = 0; x < 100; x++)
{
    for (int y = 0; y < 100; y++)
    {
        map[x, y] = ArrayTest.Properties
                             .Settings
                             .Default
                             .mapSaveSetting
                             .ElementAt(currentposition);
        currentposition++;
    }
}

现在发生的几乎是我所希望的。问题是它给每个值分配两个数字,而不是一个。我也不知道他在使用什么数字,因为它们不是我的地图保存设置中的数字,但我可以自己处理。

我真正不明白的唯一问题是,在执行这个for循环后,每个值都包含两个数字。为什么会发生呢?ElementAt(int)只返回一个字符,对吗?

对我来说,这真的是一个合乎逻辑的错误,但我找不到它。如果我只是在思维方式上犯了一个愚蠢的错误,请不要冒犯我。

编辑由于现在似乎还不清楚问题是什么,我将添加一个示例。

map[0, 0] == 42

...可能是一种输出。即使字符串以例如4245634开头,也没有意义,因为ElementAt(int)应该只返回4,而不是42,对吗?

共有3个答案

法子昂
2023-03-14

您正在将char值分配给intchar设计了一个Unicode代码点,它隐式地转换为int,但不是以您期望的方式:它提供了代码点。

示例:

Console.WriteLine((int)'A'); // Will print 65

实际上,您正试图将表示为字符串的一位数转换为int。使用int.为此解析

Console.WriteLine(int.Parse("5")); // Will print 5

另一个问题:您不应该在字符串上使用ElementAt,因为它将不必要地迭代整个字符串直到指定的索引,因为string没有实现IList

您可以像这样使用索引器:

int currentposition = 0;
var setting = ArrayTest.Properties.Settings.Default.mapSaveSetting;

for (int x = 0; x < 100; x++)
{
    for (int y = 0; y < 100; y++)
    {
        map[x, y] = int.Parse(setting[currentposition].ToString());
        currentposition++;
    }
}

但是将每个char转换为一个新的字符串实际上是一种浪费,所以只需使用一些基本的数学来代替:

int currentposition = 0;
var setting = ArrayTest.Properties.Settings.Default.mapSaveSetting;

for (int x = 0; x < 100; x++)
{
    for (int y = 0; y < 100; y++)
    {
        map[x, y] = setting[currentposition++] - '0';
    }
}

这是因为数字的代码点是连续的。

潘涵煦
2023-03-14

我认为你的错误与字符的ASCII值有关。您应该知道每个字符都有一个相关的ASCII值,特别是0的ASCII值为481的ASCII值为49,依此类推(您可以通过检查ASCII表来检查)。

因此,要获得正确的字符值,应该从字符串中的值减去字符0的值,如下面的代码段所示。

map[x, y] = ArrayTest.Properties.Settings.Default.mapSaveSetting.ElementAt(currentposition) - '0';
靳金鹏
2023-03-14

您正在将char分配给int。由于存在从charint的隐式对话,因此您将获得字符的Unicode代码(在您的示例中,字符表示数字)。要解决此问题,您应该将字符转换为int。在您的情况下,由于所有字符都是数字,您可以执行如下操作:

map[x, y] = 
   ArrayTest.Properties.Settings.Default.mapSaveSetting.ElementAt(currentposition) - 48;

这是因为符号[0..9]的Unicode代码是连续的,等于[48..57]。

 类似资料:
  • 我如何用整数或字符串填充我的GridPane?我目前正在数独GUI上工作,无法使其工作。我已经知道不可能用Java FX标签来显示它,因为它是Java.FX.scene.Control类。我需要以某种方式将数独值转移到GridPane中相应的坐标。

  • 问题内容: 我的代码: 引用的日志文件是: 然后,需要检查脚本中的下一个条件是: 如果条件不起作用 问题答案: 必要的修复: 此后已在问题中解决。 可能必要的修复: 如注释中所述,在脚本中使用尾随空格表示将尾随空格存储在其中,这将破坏与的比较。

  • 假设我有一个整数数组,如和一个简单的字符串,如。我如何循环通过数组和填充每一个值。假设是这样的: 输出: 到目前为止,我已经尝试了以下内容: 但是,它在print语句中给出了。解决这个问题最好的方法是什么?

  • 老师们好: C 语言实现, 给定一个字符串长度不是16字节倍数时,请将字符串左边用0填充,使其长度为16字节的整倍数。 期望得到下面给出的结果

  • 我有一个外国金融机构签名,我需要执行: FFI调用者需要提供一个缓冲区和该缓冲区的大小。Rust将向该缓冲区中填充一个字符串,最大值为,如果成功,则返回。FFI调用方应将字符串解释为ASCII。 鉴于我有一个

  • rank ▲ ✰ vote url 77 340 83 533 url 给字符串填充0 有什么方法可以给字符串左边填充0,这样就可以有一个特定长度. 字符串: >>> n = '4' >>> print n.zfill(3) >>> '004' 对于数字: >>> n = 4 >>> print '%03d' % n >>> 004 >>> print format(4, '03') # pyt