Я пытаюсь выяснить, как я мог проанализировать это строковое использование"sstream
"и C++
Формат его: "строка, интервал, интервал".
Я должен быть в состоянии отвести первую роль строки, которая содержит IP-адрес к станд.:: строка.
Вот пример этой строки:
std::string("127.0.0.1,12,324");
Я должен был бы тогда получить
string someString = "127.0.0.1";
int aNumber = 12;
int bNumber = 324;
Я упомяну снова, что не могу использовать boost
библиотека, просто sstream
:-)
Спасибо
Аналогичная проблема уже обсуждалась: Как распознать прямоугольники на этом изображении?
Что касается ваших данных, то прямоугольники, которые вы пытаетесь найти, являются единственными черными объектами. Так что вы можете попытаться сделать пороговую бинаризацию: черные пикселы те, которые имеют ВСЕ три значения RGB меньше 40 (я нашел это эмпирически). Эта простая операция делает ваш картинный выглядит следующим образом:
После этого вы можете применить преобразование Хафа для поиска строк (обсуждается в теме, на которую я ссылался), или вы можете сделать это проще. Вычислите интегральные проекции черных пикселей на оси X и Y. (Проекция на X является вектором x_i - числа черных пикселей, так что она имеет первую координату, равную x_i). Итак, вы получаете возможные значения x и y как пики проекций. Затем просмотрите все возможные сегменты, ограниченные найденными x и y (если существует много черных пикселей между (x_i, y_j) и (x_i, y_k), вероятно, есть линия). Наконец, составьте сегменты линий в прямоугольники!
-121--2636597-Как и в случае с другими платформами для разработки мобильных приложений, эти поля обычно слишком новые для программ уровня. Вы найдете другие образовательные возможности там, есть классы, книги, скринкасты в iPhone, PalmOS, Android, Blackberry и т.д. разработки просто Google подальше.
Есть вещи, как аспирантура Tisch Interactive Telecommunications Program в Нью-Йорке. Произведенная там работа часто имеет мобильный спин к ней .
Вот учебный план для Mobile Me (dia) , например, хотя я не уверен, является ли этот класс конкретно ITP.
В Калифорнии вы можете обратиться в Центр исследований в области вычислительной техники и искусства , который, я думаю, преследует несколько схожие цели.
Чтобы найти другие школы, обучающиеся на курсах по разработке Android, вы можете попробовать поиск, например: «android development» site: .edu
. Довольно много людей с классами по крайней мере: Калифорнийский университет, Карнеги-Меллон, Колумбия, Темпл-университет и многие другие.
Обновление
Немного гуглинга находит магистерскую программу по мобильным технологиям и бизнесу в университете Ювяскюля в Финляндии, которая, кажется, довольно тесно связана с, если не совсем ответ на ваш вопрос.
-121--1882304-Вот полезная функция токенизации. Он не использует потоки, но может легко выполнить требуемую задачу, разбив последовательность на запятые. Тогда вы можете делать все, что хотите с результирующим вектором токенов.
/// String tokenizer.
///
/// A simple tokenizer - extracts a vector of tokens from a
/// string, delimited by any character in delims.
///
vector<string> tokenize(const string& str, const string& delims)
{
string::size_type start_index, end_index;
vector<string> ret;
// Skip leading delimiters, to get to the first token
start_index = str.find_first_not_of(delims);
// While found a beginning of a new token
//
while (start_index != string::npos)
{
// Find the end of this token
end_index = str.find_first_of(delims, start_index);
// If this is the end of the string
if (end_index == string::npos)
end_index = str.length();
ret.push_back(str.substr(start_index, end_index - start_index));
// Find beginning of the next token
start_index = str.find_first_not_of(delims, end_index);
}
return ret;
}
Библиотека инструментов Toolkit C ++ (STRTK) имеет следующее решение для вашей проблемы:
int main() { std::string data("127.0.0.1,12,324"); string someString; int aNumber; int bNumber; strtk::parse(data,",",someString,aNumber,bNumber); return 0; }
больше примеров можно найти здесь
Не нравится, но вы можете использовать STD :: GetLine, чтобы разделить строку:
std::string example("127.0.0.1,12,324");
std::string temp;
std::vector<std::string> tokens;
std::istringstream buffer(example);
while (std::getline(buffer, temp, ','))
{
tokens.push_back(temp);
}
, затем вы можете извлечь необходимую информацию из каждой из разделяемых строк.
Два альтернативных решения:
DrawIfPossible ()
в IItem
. IDrawableItem
должен переопределять его для вызова Draw ()
, другие реализаторы IItem ()
должны иметь пустую реализацию. Явный запрос типа считается признаком того, что с конструкцией может быть что-то не так.
-121--4716603-Мы успешно использовали этот код:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace Utility {
internal static class ObjectCloner {
public static T Clone<T>(T obj) {
using (MemoryStream buffer = new MemoryStream()) {
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(buffer, obj);
buffer.Position = 0;
T temp = (T)formatter.Deserialize(buffer);
return temp;
}
}
}
}
Возможно, есть другие методы, которые работают лучше, но, возможно, это поможет вам
Крис
-121--3448161-Вы могли бы сделать что-то подобное, а также я верю (Полностью с верхней части моей головы, так что извиняюсь, если я сделал некоторые ошибки там)...
stringstream myStringStream( "127.0.0.1,12,324" );
int ipa, ipb, ipc, ipd;
char ch;
int aNumber;
int bNumber;
myStringStream >> ipa >> ch >> ipb >> ch >> ipc >> ch >> ipd >> ch >> aNumber >> ch >> bNumber;
stringstream someStringStream;
someStringStream << ipa << "." << ipb << "." << ipc << "." << ipd;
string someString( someStringStream.str() );