C ++新手在这里。写一个简单的程序。一切正常,除非我尝试提取名字和姓氏并单独打印时,姓氏中打印的字母数量始终与名字中的数字相同。因此,如果名称是jackson,程序将打印firstname为:will和second name as:jack。我该如何解决这个问题?
这是代码
for( i = 0; i < 19; i++)
if(cAddress[i] == ' ' || cAddress[i] == '_' || cAddress[i] == '-' || cAddress[i] == '.')
break;
strncpy(cFirst, cAddress, i);
cFirst[i] = '\0';
cout << endl << "\n";
cout << "Your first name is " << cFirst << endl;
strcpy(cSur,cAddress + i + 1);
cSur[i] = '\0';
cout << endl;
cout << "Your surname is " << cSur << endl;
答案 0 :(得分:2)
你正在第(i + 1)个位置添加一个\0
字符 - 这标志着字符串的结束,所以它打印出来。在该行之前,cSur可能包含整个姓氏。
答案 1 :(得分:2)
您的大多数代码看起来很像C - 甚至没有充分利用C标准库。在C ++中,我写的更像是:
int pos = Address.find_first_of(" _-.");
std::string FirstName(Address, 0, pos);
std::string SurName(Address, pos);
如果由于某种原因,您坚持使用C样式字符串,您可以考虑从strpbrk
开始查找分隔符。
答案 2 :(得分:0)
cSur[i] = '\0';
不正确。我是名字的长度。 cSur已经被strcpy终止。
解释一下,Jerry Coffin的回答是我推荐的好c ++代码。