2015-11-10 51 views
-5

例如,在下面的代碼:如何分配一個從數組中間開始的char數組?

char name[20] = "James Johnson"; 

我要分配的所有字符的空白的字符數組的末尾之後開始,所以基本上串是這樣的:(未初始化它但只是表明想法)

string s = "Johnson"; 

因此,本質上,字符串將只接受姓氏。我怎樣才能做到這一點?

+3

C或C++?請選擇一種語言。 – ameyCU

+0

假設C:檢出[strtok](http://linux.die.net/man/3/strtok_r)。但是不管它是哪種語言 - 你會想要添加一大堆驗證代碼(因爲用戶是愚蠢的,並輸入最殘酷的東西;)) – tonysdg

+1

假設_'string'的C++原因__ – Tas

回答

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> 
0

總有不止一種方法可以做到 - 它完全取決於您要求的內容。

你既可以:

  • 搜索第一空間的位置,再點一個char *在一過去,那個位置(查找,和strchr在<爲c_string >)
  • 分裂字符串轉換成子串,你的分割字符是一個空間的列表(查找的strtok或升壓分割)
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'; 
} 
相關問題