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但此字符串不包含任何内容.
| 归档时间: |
|
| 查看次数: |
2238 次 |
| 最近记录: |