c++ 我如何调用一个在头中有一个字符串和一个int的函数?

wgx48brx  于 2023-04-01  发布在  其他
关注(0)|答案(2)|浏览(93)

我有一个问题,为什么我的代码没有被正确调用。我觉得我有90%的正确率。我的代码是为了重复单词“n”的次数。

string repeat(string str, int n);
int main ()
{
    string repeat_main;
    repeat_main = repeat("str", 5);
}

string repeat(string str, int n)
{
    string repeated_str;
    int i = 0;
    cout << "enter the word you would like to repeat: ";
    cin >> str;
    cout << "how many times would you like it to repeat? ";
    cin >> n;

    while (i < n)
    {
        repeated_str += str;
        i++;
    }
    return repeated_str;
}

我试着在我的主函数中调用repeat函数,它不显示我要找的东西。

9bfwbjaz

9bfwbjaz1#

据我所知,你的代码有两个问题:

  • 如果您计划在main之后定义该函数,则需要向前声明该函数。
  • 您需要cout << repeat_main,以便打印字符串。
#include <string>
#include <iostream>

using namespace std;

string repeat(string str, int n);

int main ()
{
    cout << repeat("str", 5);
}

string repeat(string str, int n)
{
    string repeated_str;
    int i = 0;
    cout << "enter the word you would like to repeat: ";
    cin >> str;
    cout << "how many times would you like it to repeat? ";
    cin >> n;

    while (i < n)
    {
        repeated_str += str;
        i++;
    }

    return repeated_str;
}

正如注解中所指出的,如果你只是让你的函数提示输入,那么你可以删除无用的参数。

string repeat()
{
    string repeated_str;
    string str;
    int n;
    int i = 0;
    cout << "enter the word you would like to repeat: ";
    cin >> str;
    cout << "how many times would you like it to repeat? ";
    cin >> n;

    while (i < n)
    {
        repeated_str += str;
        i++;
    }

    return repeated_str;
}

或者保留它们,并使用它们来处理main中的IO。

string repeat(string str, int n)
{
    string repeated_str;
    int i = 0;

    while (i < n)
    {
        repeated_str += str;
        i++;
    }

    return repeated_str;
}
yeotifhr

yeotifhr2#

你几乎就完成了。你没有显示重复的字符串。我解决了你的问题,同时也提高了可读性和可维护性:

  • 总是在你发布的代码中说明你的包含,这从来都不是显而易见的。
  • 正如@paddy所说,没有必要做一个要求用户输入的函数。你是在混合输入采集和输入处理。在我的代码中,输入采集是在main()中完成的。
  • 在你的例子中,for()循环比while()更可读。也许你在一所学校,强制执行完全愚蠢的代码风格,禁止使用for()?要知道,你不能在校外这样编码。
  • 不要使用using namespace,它们的存在是为了将函数名从不同的源中分离出来。在那里几乎没有问题,当你开始添加多个依赖项时,你会**运行在麻烦中(两个命名空间都定义了自己的string),不要养成using namespace的坏习惯。
  • 在参数中使用const std::string&,除非你知道不需要它。没有&,你通过值传递参数,所以所有的函数调用都会复制字符串,使用&,你通过引用传递,所以函数中对象的任何操作都会发生在调用函数中的对象上。除了int,float,booleans,指针和枚举之外,99%的情况下都要通过引用。
  • 关于上面的const,它允许你在函数中使用const std::string对象,并且(最重要的)防止意外的字符串修改,编译会失败。
  • 你的原始答案中的str参数没有任何意义。它的内容从未使用过,因为它是通过复制传递的,并被cin >> std完全擦除,它应该是一个变量。下面的代码使用了str参数。
#include <iostream>
#include <string>

std::string repeat(const std::string& str, int n);

int main ()
{
    // Acquiring inputs
    std::string str;
    int n;
    std::cout << "enter the word you would like to repeat: ";
    std::cin >> str;
    std::cout << "how many times would you like it to repeat? ";
    std::cin >> n;
    // Printing repeated string
    // I am not using an intermediate variable there
    std::cout << repeat(str, 5) << std::endl;
}

std::string repeat(const std::string& str, int n)
{
    std::string repeated_str;
    for (int i = 0; i < n; ++i) {
        repeated_str += str;
    }
    return repeated_str;
}

相关问题