【问题标题】:Truncating an array of char via function C++通过函数 C++ 截断 char 数组
【发布时间】:2018-01-28 08:17:24
【问题描述】:

尝试格式化此函数,因为它会截断一个 char 数组(用户输入的任何内容都会将其拆分为用户也输入的数字)

void truncate(char array[], int maxLength)
{
    // Variable definition
    int x = 0;

    // While loop start.
    while (array[x] <= maxLength)
    {
        cout << array[x];
        x++;
    }
}

函数头中的数组参数只是用户输入的一个字符串,它是一个char数组。 maxLength 参数也是用户输入的 int 变量,可以是 3、4 或 5。maxLength 应该充当空终止符,无论用户输入什么字符串都会在该数字之后截断。

但是这段代码不起作用,它不显示函数的输出。有人知道我在做什么错吗?谢谢。

【问题讨论】:

  • 本质上,您并没有真正“截断”数组;您只是打印出第一个 maxLength 元素。还要在每个 cout 末尾添加一个换行符
  • 哦,是的,我完全忘记了,哈哈。
  • 如果问题是针对 [c++] 的,请不要用 [c] 标记问题。

标签: c++ truncate


【解决方案1】:

这里的问题是这样的:

while (array[x] <= maxLength)

这是比较从 x 处的数组返回的字符与 maxLength 的值,因此您将 char 与 int 进行比较。我会为此推荐更标准的 for 循环:

for (int x = 0; x < maxLength; x++) {
    cout << array[x];
}

【讨论】:

  • 哦,我明白了。非常感谢你的帮助。现在使用 for 循环。
【解决方案2】:
int truncate(const char *str, int maxchunk, char ***chunks)
{
    int len = strlen(str);
    int nchunks = len / maxchunk + !!(len % maxchunk);
    char **table = malloc(sizeof(char *) * (nchunks));
    if (table != NULL)
    {

        for (int i = 0; i < nchunks; i++)
        {
            if ((table[i] = malloc(sizeof(char) * maxchunk + 1)) == NULL)
            {
                for (int j = i - 1; j >= 0; j--)
                {
                    free(table[j]);
                }
                free(table);
                table = NULL;
                break;
            }
            strncpy(table[i], str + i * maxchunk, maxchunk);
            *(table[i] + maxchunk) = '\0';
        }
    }
    *chunks = table;
    return table == NULL ? -1 : nchunks;
}

【讨论】:

    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2018-08-16
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多