2009-11-16 232 views
0

我有一串電話號碼字符串,我必須在其中插入連字符。我應該使用什麼字符串函數,以及如何? 謝謝。 :D將連字符插入字符串C++

+1

這是一個功課題嗎?你想在哪裏得到連字符?給出一個輸入電話號碼及其相應輸出電話號碼的例子。 – wilhelmtell 2009-11-16 23:45:06

+0

你的字符串是'std :: string'實例還是'char *'s? – 2009-11-16 23:45:25

+1

是的,這是一項家庭作業 3823920578 = 382-392-0578 – user212463 2009-11-16 23:46:10

回答

1

使用STL字符串函數。遍歷字符串數組過來,併爲每個字符串,這樣做:

str_num = str_num.substr(0,3) + "-" + str_num.substr(3,3) + "-" + str_num.substr(6,4); 

編輯:您可以使用insert()還有,我認爲這將是一個更好的辦法。

+0

不,您正在連接。 – wilhelmtell 2009-11-16 23:49:44

+0

這真的是效率低下,它使字符串的幾個不必要的副本。 – 2009-11-16 23:50:07

+0

非常感謝!它工作完美。 :D – user212463 2009-11-17 00:03:41

1

嗯,我不會給出答案,但最簡單的做法是使用std::string::insert方法,假設您正在執行C++。

對於C字符串,您必須手動複製周圍的字符。我可能會使用sprintf

+2

strncat將是更有用的C風格字符串函數。 – 2009-11-17 00:01:57

+0

你至少需要三次獨立調用'strcat'或類似的函數,或者你可以像'sprintf(buf,「%.3s - %。3s - %。4s」,s,s + 3,s + 6)'。只是一個風格問題,真的。 – 2009-11-17 00:30:22

-1

您可以使用strtok函數將其分割爲令牌。

char * strtok (char * str, const char * delimiters); 
+2

如果沒有分隔符,則無法分割。 10位數字中的分隔符在哪裏可以將其分割爲(3,3,4)數字? – 2009-11-17 00:14:32

+0

@Joy Dutta我同意,但是當我發佈答案時,我腦海裏還有其他東西。現在我會使用迭代器。 – Secko 2009-11-17 00:36:24

0

你想要的是給每個字符串添加兩個字符,在兩個特定的位置。

創建一個函數,該函數只需要一個電話號碼字符串並在適當的位置添加連字符。這是一個很好的例子,它很容易使用字符串連接,但這是一個壞習慣。相反,您可以使用string::insert()在適當的位置放置連字符。

一旦你寫了這個簡單的函數,你所要做的就是迭代數組並在每個元素上應用函數。巧合的是for_each()函數可以做到這一點。你會在<algorithm>找到它。

#include<string> 
#include<algorithm> 

void with_hyphens(string& phone) 
{ 
    // as explained above 
} 

// ... 
{ 
    for_each(array, array + ARRAY_LENGTH, &with_hyphens); 
}