【问题标题】:having a funtion store a string that it makes lowercase and returns it for later use in C++让函数存储一个小写的字符串并将其返回以供以后在 C++ 中使用
【发布时间】:2021-08-14 06:30:32
【问题描述】:

好的,我有一个我正在尝试制作的程序,基本的事情是防止我在整个项目中一遍又一遍地重写相同的长 4 行代码,我想看看我能不能得到它从 cin 获取一个字符串并将整个字符串变为小写(我知道转换方法,但这样我就不必编写真正长度的 if 语句)并返回该字符串以用作其他中的变量部分程序或其他功能。

我不知道我是否只需要让函数在主块中返回变量本身还是什么。我对 c++ 和一般编码很陌生,如果它可能的 id 喜欢在字符串中包含空格。再说一次,我在 c++ 方面并没有太多经验,所以我想知道它是否可能,如果是最好的方法。

这是我目前所拥有的

int loAns() {
    string lAnswer; //Makes the lAnswer, a string used for a long answer that a char wouldn't do properly
    cin >> lAnswer; //User enters it
    // using transform() function and ::tolower
    transform(lAnswer.begin(), lAnswer.end(), lAnswer.begin(), ::tolower); //The transform and ::tolower to make it uniform
    cout << lAnswer << endl; //Outputs the lAnswer to console

    return 0; //This is where I'm assuming the variable gets put to be used in the rest of the program
}

【问题讨论】:

  • 返回lAnswer而不是0,改变函数的返回类型。
  • 建议:传入对流的引用string loAns(istream &amp; in),以便您可以将此函数用于文件和所有其他类型的流。使您不必再次编写此函数。也值得测试in &gt;&gt; lAnswer; 以确保它成功。您迟早不检查的错误最终会成为您必须寻找的错误。

标签: c++ string function return-value tolower


【解决方案1】:

你的解释是正确的。本质上,函数是这样声明的:

type name ( parameter1, parameter2, ...) 
{
    //statements
    return <var>;
}

type 用于将变量返回给其他程序。在这种情况下,你想返回一个std::string,所以你的函数可能是这样的:

#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

string loAns()
{
    string lAnswer;
    cin >> lAnswer;
    transform(lAnswer.begin(), lAnswer.end(), lAnswer.begin(), ::tolower);
    return lAnswer;
}

int main()
{
    string s = loAns();
    cout << s;
}

结果:

xYZabC123
xyzabc123

如果您希望字符串中有空格,可以使用getline():

#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

string loAns()
{
    string lAnswer;
    getline(cin, lAnswer);
    transform(lAnswer.begin(), lAnswer.end(), lAnswer.begin(), ::tolower);
    return lAnswer;
}

int main()
{
    string s = loAns();
    cout << s;
}

结果:

ABc   XYZ   123&A
abc   xyz   123&a
  • 更多信息:

功能:https://en.cppreference.com/w/cpp/language/functions

return : https://en.cppreference.com/w/cpp/language/return

getline() : https://en.cppreference.com/w/cpp/string/basic_string/getline

【讨论】:

  • 几条笔记,初始化std::string lAnswer{}; 以及是否使用std::cingetline(),使用例如验证if (!(std::cin &gt;&gt; lAnswer)) { std::cout &lt;&lt; "user canceled input.\n"; return lAnswer; }。您可以简单地输出警告并让它顺利通过转换,因为在这种情况下开始和结束是相同的。对C++ reference 的引用要好得多。假设您引用的其他网站的一些建议充其量是不完整的。
  • @DavidC.Rankin 是的,我会修改我的答案。感谢 cmets!
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多