Вы используете C или C++? Следующая версия C++, C++ 0x, будет поддерживать шаблоны variadic , которые предоставляют решение той проблемы.
Другое обходное решение может быть достигнуто умным оператором, перегружающимся для достижения синтаксиса как это:
void f(varargs va) {
BOOST_FOREACH(varargs::iterator i, va)
cout << *i << " ";
}
f(args = 1, 2, 3, "Hello");
, Чтобы заставить это работать, класс varargs
должен быть реализован для переопределения operator =
, который возвращает объект прокси, который, в свою очередь, переопределяет operator ,
. Однако создание этого варианта, безопасного с точки зрения типов в текущем C++, не возможно, насколько я знаю, так как это должно было бы работать стиранием типа.
Удаление всех пробелов:
foo = ''.join(foo.split())
Удаление последних трех символов:
foo = foo[:-3]
Преобразование в заглавные буквы:
foo = foo.upper()
Весь этот код в одной строке:
foo = ''.join(foo.split())[:-3].upper()
Это не работает так, как вы ожидаете, потому что полоса основана на символах. Вместо этого вам нужно сделать это:
foo = foo.replace(' ', '')[:-3].upper()
Возможно, вы немного неправильно поняли rstrip, он не удаляет строка, но любой символ в указанной вами строке.
Примерно так:
>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'
Поэтому вместо этого просто используйте
text = text[:-3]
(после замены пробелов ничем)
Я стараюсь избегать регулярных выражений, но это работает:
string = re.sub ("\ s", "", (string.lower ())) [: -3]
Что с этим не так?
foo.replace(" ", "")[:-3].upper()
Разве вы не выполняете операции в неправильном порядке? Кажется, что ваше требование foo [: - 3] .replace ("", "") .upper ()
Это кое-что зависит от вашего определения пробелов. Обычно я бы назвал пробелами пробелы, табуляции, разрывы строк и возврат каретки. Если это ваше определение, вы хотите использовать регулярное выражение с \ s для замены всех символов пробелов:
import re
def myCleaner(foo):
print 'dirty: ', foo
foo = re.sub(r'\s', '', foo)
foo = foo[:-3]
foo = foo.upper()
print 'clean:', foo
print
myCleaner("BS1 1AB")
myCleaner("bs11ab")
myCleaner("BS111ab")
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'