Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
mariacatz
1 / 1 / 0
Регистрация: 06.12.2014
Сообщений: 37
1

Поиск чисел в строке символов

05.01.2015, 15:22. Просмотров 890. Ответов 10
Метки нет (Все метки)

Прошу помочь с алгоритмом,т к сама не понимаю. Пыталась записать каждое число в отдельную строку,а потом призвоить float строке,но это невозможно,да и к тому же непонятно, сколько пустых строк создавать,т к неизвестно,сколько чисел будет в строке. В общем,помогите пожалуйста
В задании обязательно вписать числа в буфер в формате float
Пример использования программы

C++
1
2
3
4
5
6
7
8
9
10
11
char s[] = "12.45, 678.99, -34, 0.0004 ";
float B[100];
printf( "\nЗаписано чисел: %d", f( s, B ));
// вывод на экpан:
//
// 12.450000
// 678.99000
// -34.000000
// 0.000400
// Записано чисел: 4
*/
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2015, 15:22
Ответы с готовыми решениями:

Поиск бинарных чисел в строке символов и их преобразование
Добрый вечер. Нужна помощь в реализации программы. Задача: Дана строка...

Поиск символов в строке C++
Помогите с задачей, буду очень благодарен Суть задачи такова: в качестве...

Поиск символов в строке
Доброго времени суток! Помогите пожалуйста-Нужно подсчитать в строке...

Поиск символов в строке
Ребят, помогите. Ломаю голову уже второй день Условие задачи заключается в...

Поиск символов в строке
написать прогу, которая запрашивает с клавиатуры строку, длиной 100 символов ,а...

10
nmcf
6507 / 5740 / 2613
Регистрация: 14.04.2014
Сообщений: 24,482
05.01.2015, 15:45 2
Лучший ответ Сообщение было отмечено mariacatz как решение

Решение

Разделяешь строку на слова с помощью strtok() в цикле и сразу же преобразуешь в число с помощью strtof() и добавляешь в массив, если преобразование успешно.
1
mariacatz
1 / 1 / 0
Регистрация: 06.12.2014
Сообщений: 37
05.01.2015, 16:17  [ТС] 3
а вообще можно без этих функций?

Добавлено через 8 минут
просто не все понятно(
0
nmcf
6507 / 5740 / 2613
Регистрация: 14.04.2014
Сообщений: 24,482
05.01.2015, 16:17 4
Не использовать эти функции - значит реализовать их функционал самостоятельно. Можно, но получится длинно.
0
mariacatz
1 / 1 / 0
Регистрация: 06.12.2014
Сообщений: 37
05.01.2015, 16:30  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//пример использования функции strtod
#include <iostream>
#include <cstdlib>
 
int main()
{
  char szOrbits[] = "365.24 29.53";
  char * ptrEnd;
  double d1 = strtod (szOrbits, &ptrEnd),          // преобразовать первое число
         d2 = strtod (ptrEnd, NULL);               // преобразовать второе число
  std::cout << "Луна совершает в год " << (d1 / d2) << " оборотов вокруг землиn";
  return 0;
}
объясните пожалуйста,что такое ptrEnd и Null здесь
0
nmcf
6507 / 5740 / 2613
Регистрация: 14.04.2014
Сообщений: 24,482
05.01.2015, 18:49 6
ptrEnd - это указатель на символ в строке, который идёт за последним, относящимся к числу. В этом примере он будет на пробеле после 365.24.
0
Enno
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
05.01.2015, 18:54 7
Для первого числа sscanf(str, "%f")
Для остальных sscanf(str, ", %f") в цикле.
0
mariacatz
1 / 1 / 0
Регистрация: 06.12.2014
Сообщений: 37
05.01.2015, 21:31  [ТС] 8
и все-таки не понимаю,как правильно использовать эти функции что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include "conio.h"
#include "string.h"
#include "cstdlib"
int main()
{
    char s[] = "12.45, 678.99, -34, 0.0004 ";
    
    char * pch = strtok(s, " ,");//разбила строку s на числа
    char * ptrEnd;
    double d1 = strtod(s, &ptrEnd),
        d2 = strtod(ptrEnd, NULL);//преобразовала 2 числа из строки в double
    printf("%d%\n%d", d1, d2);
        
getch();
    }
Добавлено через 1 час 25 минут
не понимаю я
0
nmcf
6507 / 5740 / 2613
Регистрация: 14.04.2014
Сообщений: 24,482
05.01.2015, 21:31 9
Цикл где?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include "conio.h"
#include "string.h"
#include "cstdlib"
int main()
{
    double a[10];
    int count = 0;
    char s[] = "12.45, 678.99, -34, 0.0004 ";
    
    char * ptrEnd;
    char * pch = strtok(s, " ,");//разбила строку s на числа
    while (pch != NULL)
    {
        double d1 = strtod(s, &ptrEnd);
        if (ptrEnd[0] == '\0') a[count++] = d1;
        pch = strtok(NULL, " ,");
    }
    for (int i = 0; i < count; ++i) printf("%lf ", a[i]);
 
    printf("\n\n");
        
    system("pause");
}
1
mariacatz
1 / 1 / 0
Регистрация: 06.12.2014
Сообщений: 37
05.01.2015, 21:34  [ТС] 10
Access violation
???

Добавлено через 30 секунд
ой,все в порядке
0
nmcf
6507 / 5740 / 2613
Регистрация: 14.04.2014
Сообщений: 24,482
05.01.2015, 21:36 11
Лучший ответ Сообщение было отмечено mariacatz как решение

Решение

В 15-й строке исправь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include "conio.h"
#include "string.h"
#include "cstdlib"
int main()
{
    double a[10];
    int count = 0;
    char s[] = "12.45, 678.99, -34, 0.0004 ";
    
    char * ptrEnd;
    char * pch = strtok(s, " ,");//разбила строку s на числа
    while (pch != NULL)
    {
        double d1 = strtod(pch, &ptrEnd);
        if (ptrEnd[0] == '\0') a[count++] = d1;
        pch = strtok(NULL, " ,");
    }
    for (int i = 0; i < count; ++i) printf("%lf ", a[i]);
 
    printf("\n\n");
        
    system("pause");
}
1
05.01.2015, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2015, 21:36

Поиск символов в строке
задание такое: Дана строка произвольной длины. Группы символов, разделенные...

Поиск символов в строке
Есть строка в файле txt, как организовать поиск наиболее часто повторяющегося...

Поиск палиндрома в строке символов
Условие задачи: 1) Задан символьный массив F(N), N&lt;=260. Найти отрезок массива...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru