2011-06-11 68 views
0
#include <iostream> 
#include <string.h> 

using namespace std; 

int main() 
{ 
    char firstname[] = "Alfred"; 
    char middlename [] = "E"; 
char lastname[] = "Neuman"; 
    char fullname [80]; 
    int offset=0; 

    strcpy(fullname,firstname); 
    offset = strlen(firstname); 
    strcpy(fullname+offset," "); 
    offset +=1; 
    strcpy(fullname+offset,middlename); 
    offset += strlen(middlename); 
    strcpy(fullname+offset," . "); 
    offset +=2; 
    strcpy(fullname+offset,lastame); 

    cout << firstname << "." << middlename << "." << lastname << endl; 
    cout << "Fullname:" << fullname << endl; 

    return 0; 
} 

爲什麼在此需要偏移量,爲什麼當我們正在處理文本時,需要將偏移量設置爲1和2。我似乎無法理解字符串和陣列,任何人都不介意幫助?使用字符串數組的幫助C++

回答

3

這是因爲您使用了錯誤的工具。

std::string firstname = "Alfred"; 
std::string middlename = "E"; 
std::string lastname = "Numan"; 
std::string fullname = firstname + " " + middlename + " . " + lastname; 

偏移用來跟蹤數組中字符串的當前位置,這樣就可以strcpy新的參數到正確的地方。

0

您將分隔符(空格)的長度添加到偏移量,以便將名稱的下一部分寫入正確的位置。

+0

非常感謝你! – Ibrahim 2011-06-11 22:05:48

0

正在使用「偏移量」將複製操作的起點移動到數組中最後一個字符之後的一個字符處。隨着更多字符被複制到全名中,偏移量將增加以指向全名數組中剩餘的未使用空間的第一個字符。

0
strcpy(fullname,firstname); 

將名字複製到全名緩衝區中。

offset = strlen(firstname); 

,所以你知道從哪裏開始,接下來的事情複製到全名緩衝區,在這種情況下,一個空的空間字符集的偏移量等於名字的長度。

offset +=1; 

移動您的偏移量以傳遞該字符,以便您從該點開始複製到全名緩衝區中。

strcpy(fullname+offset,middlename); 

將中間名複製到全名緩衝區中。

offset += strlen(middlename); 

將中間名的長度添加到偏移量,再次使下一個複製操作立即開始。

strcpy(fullname+offset," . "); 

複製到'。'中。爲中間最初。

offset +=2; 

將您的偏移量增加到正確的點數。

strcpy(fullname+offset,lastame); 

以姓氏複製。

0

瞭解這兩個陳述,然後它是一個鉛筆紙練習。

  1. 數組索引從0開始
  2. arrayVariable + integer是在arrayVariable序列integer + 1位置的索引。因此,arr+3是序列中的位置4。 (由於數組索引從0開始)