0

C++ 新手在这里。编写一个简单的程序。一切正常,除了当我尝试提取名字和姓氏并单独打印它们时,姓氏中打印的字母数量将始终与名字中的数字大小相同。所以如果名字是 will jackson,程序会打印 firstname as: 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;
4

3 回答 3

2

您的大部分代码看起来很像 C —— 甚至没有充分利用 C 标准库。在 C++ 中,我会写一些类似的东西:

int pos = Address.find_first_of(" _-.");

std::string FirstName(Address, 0, pos);
std::string SurName(Address, pos);

如果出于某种原因,您坚持使用 C 风格的字符串,您可能会考虑从strpbrk查找分隔符开始。

于 2012-05-29T23:52:34.543 回答
2

\0在第 (i+1) 个位置添加一个字符 - 这标志着字符串的结尾,所以这就是它打印的全部内容。在该行之前,cSur 可能包含整个姓氏。

于 2012-05-29T23:36:00.283 回答
0
cSur[i] = '\0';

是不正确的。i 是名字的长度。cSur 已经为零,由 strcpy 终止。

解释了这一点后,Jerry Coffin 的回答是我推荐的优秀 c++ 代码。

于 2012-05-30T00:43:11.357 回答