简单的C++代码(这里有什么问题?)

0 c++

Noob to C++.

我正在尝试获取用户输入(姓氏,名字中间名),更改部分(中间名称为中间名称),然后重新排列它(First Middle Initial Last).

我在哪里弄乱我的代码?

- 谢谢你尽你所能的帮助!

...

#include <iostream>
using std::cout;
using std::cin;

#include <string>
using std::string;

int main()
{

  string myString, last, first, middle;

  cout << "Enter your name: Last, First Middle";

  cin >> last >> first >> middle;

  char comma, space1, space2;

  comma = myString.find_first_of(',');
  space1 = myString.find_first_of(' ');
  space2 = myString.find_last_of(' ');

  last = myString.substr (0, comma); // user input last name
  first = myString.substr (space1+1, -1); // user input first name
  middle = myString.substr (space2+1, -1); // user input middle name

  middle.insert (0, space2+1); // inserts middle initial in front of middle name
  middle.erase (1, -1); // deletes full middle name, leaving only middle initial

  myString = first + ' ' + middle + ' ' + last; //  

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 14

那么你搜索的东西,myString但从来没有把它设置为任何东西(它是一个空字符串).

你应该读一整行myString.

std::getline(std::cin, myString); 
Run Code Online (Sandbox Code Playgroud)

然后你可以寻找,和空格等.第二个问题是你应该使用size_t逗号,space1和space2的类型.它们保留字符串中空格和逗号的位置:如果在输入中找不到逗号或空格,则返回查找函数string::npos,这是a中的最高值size_t.但这会溢出一个char.为了可靠地分配位置,您应该将这三个变量的类型更改为size_t.

然后,而不是-1说你要提取一个子字符串,直到结束只是省略它:它有一个指定的参数的默认参数string::npos.如果你真的想要传递它,也许是因为它提高了你的可读性,请使用string::npos:它具有正确的type(size_t),并且不需要转换int(带有值-1).


p4b*_*bl0 12

不应该这样:

cin >> last >> first >> middle;
Run Code Online (Sandbox Code Playgroud)

cin >> myString;
Run Code Online (Sandbox Code Playgroud)

因为之后您搜索逗号和空格,myString但此字符串不包含任何内容.

  • 那是行不通的,因为它会停止在第一个空间读取线. (5认同)
  • 怎么会得到这么多的赞成......除非他们没有空格地输入他们的名字,否则它将无法运作...... (3认同)