Я думаю, что следующий код работает
dict_x1=dict(x1)
for item in x2:
if item[0] in dictx1:
dictx1[item[0]] += item[1]
else:
dictx1[item[0] = item[1]
Причина обрезка () не находится в стандартной библиотеке, состоит в том, что, когда последний стандарт был сделан, они должны были установить равновесие между формализацией текущего поведения (добавляющий ничто нового, просто стабилизировав, что уже существовало), и добавление новой функциональности. В целом они предпочли не добавлять опцию, если она любой 1) было бы невозможно иначе, или 2) там был значительными недостатками к пользованию сторонними библиотеками вместо этого. Внесение слишком многих изменений было бы
С обрезкой (), нет никаких главных проблем совместимости. Пока Ваша сторонняя обрезка () реализация берет строку и возвращает строку, мы действительно не заботимся, где она определяется. Таким образом, это не действительно необходимо В стандартной библиотеке. Это может быть легко предоставлено другими библиотеками.
, В отличие от этого, что-то как строковый класс или вектор, классы, которые должна предоставить стандартная библиотека, потому что при использовании класса пользовательской строки, только строковые операции из той библиотеки будут работать. Со стандартной строкой библиотеки сторонние библиотеки могут быть нацелены на это общее строковое определение, и все побеждают.
, Когда последний стандарт вышел, Herb Sutter записал сообщение, описывающее это очень хорошо здесь
, Конечно, будет хорошо иметь обрезку () функция, но у них была важная персона для жарки. Они должны были стандартизировать все основы сначала. Я не думаю, что C++ 0x добавит функцию для обрезки, но он добавит много других утилит удобства, которые назад в '98 считали "ненужными" или слишком специализированными.
Нет, необходимо записать это сами или пользоваться некоторой другой библиотекой как Повышение и т.д.
В C++, Вы могли сделать:
#include <string>
const std::string whiteSpaces( " \f\n\r\t\v" );
void trimRight( std::string& str,
const std::string& trimChars = whiteSpaces )
{
std::string::size_type pos = str.find_last_not_of( trimChars );
str.erase( pos + 1 );
}
void trimLeft( std::string& str,
const std::string& trimChars = whiteSpaces )
{
std::string::size_type pos = str.find_first_not_of( trimChars );
str.erase( 0, pos );
}
void trim( std::string& str, const std::string& trimChars = whiteSpaces )
{
trimRight( str, trimChars );
trimLeft( str, trimChars );
}
Как другие сказали, комитет был занят (многими) другие проблемы. Повышение заполнило некоторые разрывы, как с string_algo библиотекой функции обрезки :
string testTrim(" \n\r\r\n \r\n text here\nwith return \n\r\r\n \r\n ");
trim(testTrim);
cout << testTrim;
В былые времена, с scanf () , одно пространство соответствовало бы любому количеству пробельных символов.
Поэтому мы использовали fgets () сопровождаемый sscanf () . Предотвратить соответствие новой строке как часть того пробела.
Я не знаю слишком много о C++, но проверка это , чтобы видеть, как выполнить это в C. (В моей защите: Вы действительно говорили C/C ++ в заголовке :-)
Вы можете использовать VC ++. Класс CString имеет функцию обрезки. : D