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/