如何为字符串分配一个从数组中间开始的char数组?

时间:2015-11-10 03:41:08

标签: c++ c

例如,在以下代码中:

char name[20] = "James Johnson";

我想将从空格开始的所有字符分配到char数组的末尾,所以基本上字符串如下所示:(不初始化它只是显示想法)

string s = "Johnson";

因此,基本上,字符串只接受姓氏。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

总有不止一种方法可以做到 - 这完全取决于你所要求的内容。

你可以:

  • 搜索第一个空格的位置,然后将char *指向一个过去的位置(在< cstring>中查找strchr)
  • 将字符串拆分为子字符串列表,其中您的拆分字符是空格(查找strtok或boost拆分)

答案 1 :(得分:0)

std::string有一整套字符串操作功能,我建议你使用它们。

您可以使用std::string::find_first_of找到第一个空格字符,并从那里拆分字符串:

char name[20] = "James Johnson";
// Convert whole name to string
std::string wholeName(name);
// Create a new string from the whole name starting from one character past the first whitespace
std::string lastName(wholeName, wholeName.find_first_of(' ') + 1);
std::cout << lastName << std::endl;

如果您担心多个名称,也可以使用std::string::find_last_of

如果您担心名称未被空格分隔,您可以使用std::string::find_first_not_of并搜索字母表中的字母。链接中给出的示例是:

std::string str ("look for non-alphabetic characters...");
std::size_t found = str.find_first_not_of("abcdefghijklmnopqrstuvwxyz ");
if (found!=std::string::npos)
{
    std::cout << "The first non-alphabetic character is " << str[found];
    std::cout << " at position " << found << '\n';
}

答案 2 :(得分:0)

我想你想要这样......

string s="";
for(int i=strlen(name)-1;i>=0;i--)
{
 if(name[i]==' ')break;
else s+=name[i];
}
reverse(s.begin(),s.end());

需要

include<algorithm>