【问题标题】:Name format Lab名称格式 Lab
【发布时间】:2020-10-03 00:21:21
【问题描述】:

CLICK HERE TO SEE THE IMAGE PROBLEM

C++ - 我的代码有一个大问题,我不明白我在哪里做错了,因为我没有得到我想要的结果,例如问题问我的第一个输出:(

My FULL CODE

Outputs that I'm getting wrong

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

int main() {

   string firstName, middleName, lastName, theName;
   
   getline(cin, theName);
   
   int findN = theName.find(" ");
   firstName = theName.substr(0, findN);
   int findN2 = theName.find(" ", findN + 1);
   if (findN2 != string::npos){
      middleName = theName.substr(findN2 + 1, findN2 - findN - 1);
      lastName = theName.substr(findN2 + 1, theName.length() - findN2 - 1);
      cout << lastName << ", " << firstName[0] << "." << middleName[0] << "." << endl;
      }
      else {
         lastName = theName.substr(findN + 1, theName.length() - findN - 1);
         cout << lastName << ", " << firstName[0] << " . " << endl;
         }
   

   return 0;
}

【问题讨论】:

  • 你能把原始代码粘贴到这里吗?
  • 好的,我对我的帖子做了编辑,现在你可以看到我的完整代码了:D
  • ????????请在此处以纯文本形式发布代码、错误、示例数据或文本输出,而不是难以阅读、无法复制粘贴以帮助测试代码或在答案中使用的图像,并且对依赖的人构成障碍在屏幕阅读器上。您可以编辑问题以在问题正文中添加代码。为了便于格式化,请使用{} 按钮标记代码块,或使用四个空格缩进以获得相同的效果。 屏幕截图的内容无法搜索、作为代码运行或复制和编辑以创建解决方案。
  • 中间名不是middleName = theName.substr(findN + 1, findN2 - findN - 1);吗?

标签: c++ arrays string if-statement helper


【解决方案1】:

我建议学习使用调试器。

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

int main() {

    string firstName, middleName, lastName, theName;

    getline(cin, theName);

    int findN = theName.find(" ");
    firstName = theName.substr(0, findN);
    int findN2 = theName.find(" ", findN + 1);
    if (findN2 != string::npos) {
       //changed from findN2 + 1 to findN + 1
        middleName = theName.substr(findN + 1, findN2 - findN - 1);
        lastName = theName.substr(findN2 + 1, theName.length() - findN2 - 1);
        cout << lastName << ", " << firstName[0] << "." << middleName[0] << "." << endl;
    }
    else {
        lastName = theName.substr(findN + 1, theName.length() - findN - 1);
                           //fixed the white space " . " -> ". "
        cout << lastName << ", " << firstName[0] << ". " << endl;
    }


    return 0;
}

【讨论】:

  • 两个建议。总是值得一提Why is “using namespace std;” considered bad practice? 并了解C++: “std::endl” vs “\n” 的区别。实际上 3 - 您应该将 int 更改为 size_t,因为这是返回 .find() 的正确类型,并消除了使用 findN2 != string::npos 比较有符号和无符号类型的警告。
  • 好点。我不想过多地编辑代码,所以我决定坚持最小的更改。
  • 是的,在帮助解决确切问题和指出其他改进之间始终保持平衡。这就是为什么它可能只是您提到或放在脚注中的原因。您要克服的是,有一些非常糟糕的 C++ 讲师可能认为比较 intsize_t 就可以了,等等。始终尝试确保提问者指向正确的方向。这些 cmets 足以解决这个问题。
【解决方案2】:

这很容易用调试器解决。

如果有第二个空格,您的middleNamemiddleName 都被分配从findN2 + 1 开始的子字符串。

如果没有第二个空格,则. 周围有多余的空格:“.”

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多