简单C++;代码(这里怎么了?) < C++ > N/OP>
我正在尝试获取用户输入(姓、名、中间名),将其中的一部分(中间名改为中间首字母),然后重新排列(第一个中间首字母最后一个) 我在哪里把代码弄乱了 --谢谢你能提供的任何帮助简单C++;代码(这里怎么了?) < C++ > N/OP>,c++,C++,我正在尝试获取用户输入(姓、名、中间名),将其中的一部分(中间名改为中间首字母),然后重新排列(第一个中间首字母最后一个) 我在哪里把代码弄乱了 --谢谢你能提供的任何帮助 #包括 使用std::cout; 使用std::cin; #包括 使用std::string; int main() { 字符串myString,last,first,middle; cout>最后>>第一>>中间; 字符逗号,空格1,空格2; 逗号=myString.find_first_of(','); space1=
#包括
使用std::cout;
使用std::cin;
#包括
使用std::string;
int main()
{
字符串myString,last,first,middle;
cout>最后>>第一>>中间;
字符逗号,空格1,空格2;
逗号=myString.find_first_of(',');
space1=myString.find_first_of(“”);
space2=myString.find_last_of(“”);
last=myString.substr(0,逗号);//用户输入姓氏
first=myString.substr(space1+1,-1);//用户输入名字
middle=myString.substr(space2+1,-1);//用户输入中间名
middle.insert(0,空格2+1);//在中间名前面插入中间首字母
middle.erase(1,-1);//删除完整的中间名,只保留中间的首字母
myString=first+''+middle+''+last;//
返回0;
}
这行不应该是:
cin >> last >> first >> middle;
是
?
因为在此之后,您在
myString
中搜索逗号和空格,但此字符串不包含任何内容。您在myString
中搜索内容,但从不将其设置为任何内容(它是一个空字符串)
您应该将整行内容读入myString
std::getline(std::cin, myString);
然后,您可以查找、
和空格等。第二个问题是,您应该使用size\t
作为逗号、空格1和空格2的类型。这些函数保留空格和逗号在字符串中的位置:如果在输入中找不到逗号或空格,则find函数返回string::npos
,这是大小中的最高值。但这会使字符溢出。为了可靠地分配位置,您应该将这三个变量的类型更改为size\t
然后,不要使用-1
来表示要提取子字符串直到结束,只需忽略它:它有一个指定string::npos
的参数的默认参数。如果您真的想传递它,可能是因为它提高了可读性,请改用string::npos
:它具有正确的类型(size\t
),并且不需要将int
(值为-1
)转换为它 也可以只包含名称空间std
,所以它应该是这样的。
//include headers..
using namespace std;
我修正了你的密码
#include <iostream>
#include <string>
using namespace std;
int main()
{
string myString, last, first, middle;
cout << "Enter your name: Last, First Middle" << endl;
getline(cin, myString);
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, space2 - space1); // user input first name
middle = myString.substr (space2+1, -1); // user input middle name
middle.erase(1, -1); // erases full middle name, only leaving the first character as initial
cout << first << " " << middle << ". " << last << endl;//displays output
return 0;
}
如果要在输入字符串中包含空格,请尝试使用getline()
getline(cin, myString);
在这里,您不应该对第二个参数使用-1
,否则第一个
将很乐意分配其余的字符串输入
first = myString.substr (space1+1, space2 - space1);
另外,函数middle.erase
不能真正接受字符作为参数,更好的方法是只写-1
,因为您试图除去第一个字符之后的所有内容
middle.erase(1, -1);
最后,myString=first+''+middle+''+last代码>不要,只是不要。我假设您正在尝试显示结果,std::cout
就可以了
cout << first << " " << middle << ". " << last << endl;
cout这行不通,因为它会在第一个空格处停止读取行。这怎么会得到这么多赞成票。。。除非他们输入没有空格的名字,否则这是行不通的…@DeusAduro我也不明白,这就是为什么我对litb的评论和anwser投了赞成票。JW应该接受litb的答案,这样它就会出现在页面中并突出显示。
first = myString.substr (space1+1, space2 - space1);
middle.erase(1, -1);
cout << first << " " << middle << ". " << last << endl;