从循环返回char函数数据

时间:2019-05-17 03:19:55

标签: c++

我是C ++语言的新手,但我想知道如何将3个循环连接到一个变量中,以返回我的数据以用于将来的任务。

但是我声明了变量,但是出现了错误。

char Common::punctuation(){
    char punctuation;
    for (int i = 33; i <= 47; i++)
        return (char)i;
    for (int j = 58; j <= 64; j++)
        return (char)j;
    for (int z = 91; z <= 96; z++)
        return (char)z;
    punctuation = i + j + z;
    return punctuation
}

2 个答案:

答案 0 :(得分:2)

您必须了解return语句退出了该函数。因此,以后编写的所有内容都将永远不会执行。
此外,您不能在一个char中存储多个字符,您至少需要一个字符数组,甚至最好是std::string(我们使用C ++) )。

您想做的是:

std::string Common::punctuation()
{
    std::string result;

    for(int i = 37; i <= 47; ++i)
        result += char(i);
    for(int i = 58; i <= 64; ++i)
        result += char(i);
    for(int i = 91; i <= 96; ++i)
        result += char(i);

    return result;
}

请注意,硬编码的ascii值在不同的平台上可能与@Some程序员花花公子所说的不同。

我希望它能提供帮助。

答案 1 :(得分:0)

您的代码中存在三个明显的问题。首先,由于对循环变量的引用超出了循环范围,因此您的代码将无法编译。

for (int i = ...; i < ...; ++i) 
{
    ...
}

i    // use of undeclared identifier 'i'

变量i仅存在于循环括号内,在您的情况下是隐含的。这实际上是理想的,因为它使我们避免在不打算使用的地方重用循环变量。我们真正想做的是使用循环变量来累积我们对返回变量感兴趣的字符。

这会导致代码中出现第二个问题:如果立即返回,我们将无法积累任何东西。 return标记函数的结束(除非条件逻辑)。因此,与其在for循环中立即返回,不如在返回变量中累积它。另外,为了提高代码的清晰度,请不要为变量指定与任何函数相同的名称。

最后,如果目标是返回所有标点符号,则返回类型char不足。 char是单个字符,而我们真正想要的是一个字符串,因此请尝试使用std::string

最后,您的函数可能类似于:

#include <string>

std::string Common::punctuation(){
    std::string punct_str;
    for (char c = 33; c <= 47; ++c)
        punct_str.push_back(c);
    for (char c = 58; c <= 64; ++c)
        punct_str.push_back(c);
    for (char c = 91; c <= 96; ++c)
        punct_str.push_back(c);
    return punct_str;
}

或像@Some程序员dude所说的那样,只需用返回的文字替换对函数的任何调用,因为实际上并不需要多次计算。