1

所以我一直在努力理解一种算法,我在互联网上找到了它的 C++ 代码,但问题是我知道 Java,但对 C++ 真的不熟悉,所以我在理解它时遇到了一些麻烦。这部分特别是:

int m, i, j, len;
char temp[50];
char stuff[100][100];


while(scanf("%d",&m)!=EOF)
{
    while(m--)
    {
        scanf("%s",temp);

        len = strlen(temp);
        for(i=0;i<=len;i++)
            for(j=0;j<=len;j++)
                memset(stuff[i][j],0,sizeof(char)*4);

    }
}

好的,这就是我对我不明白的部分的想法。如果有人能告诉我我是否走在正确的轨道上,我将非常感激。

while(scanf("%d",&m)!=EOF)

对于这一部分,由于没有输入文件或类似的东西,并且 m 尚未初始化。我认为这意味着它将接受用户输入的整数或双精度数,直到在控制台中给出 EOF 字符。该输入将保存为 m。我只是对while循环感到困惑。有什么正在进行吗?m 只是一个整数,所以我不太明白。

while(m--)

相当于 for(i = m; i>=0; i--) ?

scanf("%s",temp);

    len = strlen(temp);
    for(i=0;i<=len;i++)
        for(j=0;j<=len;j++)
            memset(stuff[i][j],0,sizeof(char)*4);

因此,如果 m 正在递减,它希望以字符串的形式从控制台获取用户输入,但实际上是一个字符,并将每个字符保存在 temp[] 的下一个索引中?len 是该数组中实际已初始化的字符数?这是否意味着 len == m?然后 memset 只是将每个 3 维数组的 4 个索引设置为空?

我在这里期望的是用户输入要保存在 temp 中的 n 个字符序列,然后根据序列中有多少个字符准备一个 3d 数组的 stuff[n][n][4] 全部用零填充. 只是 while 语句对于仅接受基本上是字符串的内容似乎有点过分。

任何帮助都会很棒。我以前从未用 C++ 做过任何事情,除了最后一部分之外,我已经弄清楚了。对不起,这太长了,但我试图表明我一直在想什么。

4

3 回答 3

2

java 和 c 语法相距不远,如果你知道 java,你应该很难阅读。while 循环、for 循环、与每个循环一起使用的代码块以及变量前/后递增/递减几乎相同。

scanf()是一个复杂的野兽,但你已经掌握了如何使用它的要点......它从标准输入路径读取,在你的情况下,它读取一个整数(%d 是一个 int;谷歌“man scant”是完整的详细信息),将其放入m. 您有一个循环来读取此输入,然后根据 的新值执行代码块m

while (m--)块就像您建议的 for 循环一样,它也可以在 java 中以相同的方式工作。

scanf("%s")读取一个字符串,而不仅仅是一个字符……字符串将以 NULL 结尾,但不能保证(不做更多)输入不会超过缓冲区(temp)的大小。

strlen()返回字符串的长度(不包括它的 NULL 终止符)。

memset(buffer, value, length)value从 开始写入内存buffer,共length字节。谷歌“man memset”获取文档。

于 2013-11-14T21:57:01.670 回答
0

首先,scanfprintf是 C 中主要使用的命令,尽管它们也可以在 C++ 中使用。

至于while(m--)

是相同的for (int i = m; i > 0; i--)

于 2013-11-14T21:56:52.450 回答
0
while(scanf("%d",&m)!=EOF)

将一个整数作为输入读入m,直到没有输入。

while(m--)

是的,完全等同于for(; m>=0; m--).

因此,如果 m 正在递减,它希望以字符串的形式从控制台获取用户输入,但实际上是一个字符,并将每个字符保存在 temp[] 的下一个索引中?len 是该数组中实际已初始化的字符数?这是否意味着 len == m?然后 memset 只是将每个 3 维数组的 4 个索引设置为空?

该代码将一些文本读入temp,这是一个char. strlen(temp)确定文本的temp长度(它向前计数,直到看到零char,这就是文本字符串在 C 中的终止方式)。所以不,len != m。你对角色的看法是正确的memset

我在这里期望的是用户输入要保存在 temp 中的 n 个字符序列,然后根据序列中有多少个字符准备一个 3d 数组的 stuff[n][n][4] 全部用零填充.

是的,这正是发生的事情。

于 2013-11-14T21:57:32.530 回答