#c
#c
Вопрос:
У меня есть следующий код, но он преобразует только строки в double. если строка содержит букву, это вызывает ошибку
while (cin >> s){
const char *c_ptr=s.c_str();
d = atof(c_ptr);
v.push_back(d);
}
Я хочу ввести строку типа «a1.2 3 4b» и заполнить вектор «1.2 3 4»
Комментарии:
1. cplusplus.com/reference/clibrary/cstdio/sscanf
2. sscanf будет работать, только если вы заранее знаете, сколько удвоений вы читаете, а также какие нечисловые символы содержит строка.
3. Что, если входные данные «4a1.2»? Сколько чисел должно входить в вектор? Если только один, каким должно быть его значение?
4. Вы должны либо точно определить свой ввод в соответствии с типами c , т.е. char double space int int, либо вам придется использовать регулярное выражение
5. Это ложная дихотомия, @Adrian.
Ответ №1:
Как насчет этого:
1) replace all chars in the string that aren't digits or decimal points by spaces
2) read doubles in a loop
поскольку вы избавились от букв перед разбором двойников, они больше не должны вызывать проблем.
Комментарии:
1. звучит как хорошая идея. как вы используете функцию replace для замены этих символов? я не могу заставить str.replace() работать на c
2. PS вы, вероятно, захотите использовать istringstream для шага 2, поскольку ваш приведенный выше код получит только один double из каждой строки. Смотрите daniweb.com/software-development/cpp/threads/54367 для примера.
3. Самый простой способ, который я могу придумать, это просто выполнить замену самостоятельно в цикле for . Аналогичный пример можно увидеть здесь daniweb.com/software-development/cpp/threads/349806