2009-11-16 5 views
0

У меня есть массив строк телефонных номеров, и мне нужно вставить в них дефисы. какую функцию строки я должен использовать, и как? спасибо. : Dвставить дефис в строку C++

+1

Это вопрос домашнего задания? Где вы хотите иметь дефис? Приведите пример ввода номера телефона и его соответствующего номера телефона. – wilhelmtell

+0

Являются ли ваши строки 'std :: string' экземплярами или' char * 's? –

+1

Да, это домашнее задание 3823920578 = 382-392-0578 – user212463

ответ

1

Используйте функции строки STL. Итерации по массиву строк, и для каждой строки, выполните следующие действия:

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

EDIT: Вы можете использовать insert(), а также, я думаю, что будет лучше.

+0

Нет. Вы контактируете. – wilhelmtell

+0

Это действительно неэффективно, оно делает несколько ненужных копий строки. –

+0

Большое спасибо! он работал отлично. : D – user212463

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) '. На самом деле вопрос стиля. –

-1

Вы можете использовать функцию strtok, чтобы разбить ее на жетоны.

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

Вы не можете разделить без разделителя. Где разделитель в десятизначном номере, чтобы разделить его на (3,3,4) цифры? –

+0

@Joy Dutta Я согласен, но когда я отправил ответ, что-то еще было на моем уме. Теперь я бы использовал итераторы. – Secko

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); 
}