Если вы добавили более чем аргумент ya в список Asp.Net MVC. Когда вы редактируете запись или передаете значение в сумке вида.
Используйте это, это будет работа: -
@Html.DropDownList("CurrencyID",null,String.Empty, new { @class = "form-control-mandatory" })
Вы можете прочитать число, прежде чем использовать std :: getline
, который читает из потока и сохраняет в объект std :: string
. Примерно так:
int num;
string str;
while(cin>>num){
getline(cin,str);
}
Просто прочтите данные построчно (целая строка) с помощью getline и проанализируйте их.
Для синтаксического анализа используйте find_first_of ()
Вам уже рассказывали о std :: getline
, но они не упомянули ни одной детали, которую вы, вероятно, найдете полезно: когда вы вызываете getline
, вы также можете передать параметр, сообщающий ему, какой символ считать концом ввода. Чтобы прочитать свой номер, вы можете использовать:
std::string number;
std::string name;
std::getline(infile, number, ':');
std::getline(infile, name);
Это поместит данные до ':' в номер
, отбросит ':' и прочитает остальную часть строки в имя
.
Если вы хотите использовать >>
для чтения данных, вы тоже можете это сделать, но это немного сложнее и углубляется в область стандартной библиотеки, которую большинство людей никогда не трогает. Поток имеет связанную локаль
, которая используется для таких вещей, как форматирование чисел и (что важно) определение того, что составляет «пустое пространство». Вы можете определить свой собственный языковой стандарт, чтобы определить ":" как пробел, а пробел ("") как , а не как пробел. Скажите потоку использовать этот языковой стандарт, и он позволит вам напрямую читать ваши данные.
#include <locale>
#include <vector>
struct colonsep: std::ctype<char> {
colonsep(): std::ctype<char>(get_table()) {}
static std::ctype_base::mask const* get_table() {
static std::vector<std::ctype_base::mask>
rc(std::ctype<char>::table_size,std::ctype_base::mask());
rc[':'] = std::ctype_base::space;
rc['\n'] = std::ctype_base::space;
return &rc[0];
}
};
Теперь, чтобы использовать его, мы «наполняем» поток локалью:
#include <fstream>
#include <iterator>
#include <algorithm>
#include <iostream>
typedef std::pair<int, std::string> data;
namespace std {
std::istream &operator>>(std::istream &is, data &d) {
return is >> d.first >> d.second;
}
std::ostream &operator<<(std::ostream &os, data const &d) {
return os << d.first << ":" << d.second;
}
}
int main() {
std::ifstream infile("testfile.txt");
infile.imbue(std::locale(std::locale(), new colonsep));
std::vector<data> d;
std::copy(std::istream_iterator<data>(infile),
std::istream_iterator<data>(),
std::back_inserter(d));
// just for fun, sort the data to show we can manipulate it:
std::sort(d.begin(), d.end());
std::copy(d.begin(), d.end(), std::ostream_iterator<data>(std::cout, "\n"));
return 0;
}
Теперь вы знаете , почему этой частью библиотеки так пренебрегают.Теоретически, получить стандартную библиотеку, которая будет выполнять вашу работу за вас, - это здорово, но на самом деле в большинстве случаев проще выполнить эту работу самостоятельно.
int i;
char *string = (char*)malloc(256*sizeof(char)); //since max is 255 chars, and +1 for '\0'
scanf("%d:%[^\n]s",&i, string); //use %255[^\n]s for accepting 255 chars max irrespective of input size
printf("%s\n", string);
Его C и будет работать и на C ++. scanf обеспечивает больший контроль, но не позволяет управлять ошибками. Так что используйте с осторожностью :).