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

标签 c++

C++ 新手。

我正在尝试获取用户输入(姓氏、名字和中间名),更改其中的一部分(中间名到中间名首字母),然后重新排列它(第一个中间名首字母最后一个)。

我的代码哪里搞砸了?

--感谢您提供的任何帮助!

...

#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;
}

最佳答案

那么你在myString中搜索东西但永远不要将它设置为任何东西(它是一个空字符串)。

你应该把一整行读入 myString .

std::getline(std::cin, myString); 

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

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

关于c++ - 简单的 C++ 代码(这里有什么问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1351871/

相关文章:

c++ - SDL 错误 : ld returned 1 exit status and no errors displayed

c++ - 是否需要使用互斥锁?

c++ - 连接 char 变量

java - 识别音频文件中的口头语言

c++ - 如何检查模板参数的类型?

c++ - 为什么 GLUT 加载图像倾斜,并像圆形缓冲区一样倒置在窗口上方?

c++ - 为什么 "#define A"会干扰 "namespace A{}"?

c++ - symbian c++ 中的 RSA 算法

c++ - 在模板中将 char 转换为 int 引用

C++ 堆栈推送/打印实现