Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
1

Операции со строками: найти числа в строке

16.10.2016, 17:45. Просмотров 807. Ответов 3
Метки нет (Все метки)

Здравствуйте! Можете растолковать, как такое провернуть.
Например, дана нам строка 12a923rs34.
Как мне найти число? Не цифру! Например число 12 или число 923, ну или число 23 или 4.
При этом пользуясь библиотеками string.h и stdlib.h.
C
1
2
3
4
5
6
7
8
9
int n=9,i,k,k1,sum1=0,sum2=0;
char stroka1[n],stroka2[n];
gets(stroka1);
gets(stroka2);
for(i=0;i<n;++i){
    if((stroka1[i]>='0'&&stroka1[i]<='9')&&(stroka2[i]>='0'&&stroka2[i]<='9')) k=stroka1[i]-'0',k1=stroka2[i]-'0';
    else{continue;}
sum1+=k,sum2+=k1;}
printf("%d",sum2-sum1);
Мои тщетные попытки работают только с числами одного порядка, оно и понятно, потому что операции проводятся только с цифрами.
В данном примере осуществляется ввод двух строк, поиск в них общего числа, состоящего из 8 символов, включая символы цифр. А у меня осуществляется просто суммирование цифр и подсчёт разности.
Добрые люди, подскажите, пожалуйста, как сделать так, чтобы я находил не цифры, а числа.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2016, 17:45
Ответы с готовыми решениями:

Работа со строками. Нужно найти количество глассных букв в строке
Помогите пожалуйста, почему не хочет работать корректно данный код? (с англ символами всё хорошо, а...

Операции со строками. Проверить содержится ли строка Т в строке S
Даны две строки S и Т. Проверить содержится ли строка Т в строке S. В случае положительного решения...

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

Работа со строками(операции над строками)
Пусть дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

C использованием операции in организовать проверку текущего числа цифр в строке s
C использованием операции in организовать проверку текущего числа цифр в строке s, описанных как...

3
Байт
Эксперт C
21877 / 13643 / 2876
Регистрация: 24.12.2010
Сообщений: 29,023
16.10.2016, 17:55 2
Лучший ответ Сообщение было отмечено Michail97 как решение

Решение

Цитата Сообщение от Michail97 Посмотреть сообщение
чтобы я находил не цифры, а числа.
C
1
2
3
4
5
6
7
8
9
10
11
s = 0; //сумма ЧИСЕЛ
chislo = 0;
for(i=0; i<n; i++) {
  if (str[i] >='0' && str[i]<='9') {
    chislo = 10*chislo + str[i] - '0';
  }
  else {
      s += chislo;
      chislo = 0;
  }
}
2
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
16.10.2016, 18:34  [ТС] 3
Тысяча благодарностей.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10621 / 6303 / 1582
Регистрация: 25.07.2009
Сообщений: 12,019
16.10.2016, 18:58 4
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <assert.h>
 
#define DIGITS "0123456789"
 
int find_numbers(const char * str, long ** numArrayPtr) {
    char * found, * tail = NULL;
    long num;
    int cnt = 0;
    
    assert(*numArrayPtr == NULL);
    
    for ( found = strpbrk(str, DIGITS); found; found = strpbrk(tail, DIGITS) ) {
        errno = 0;
        num = strtol(found, &tail, 10);
        if ( errno ) {
            free(*numArrayPtr);
            return -1;
        }
        else {
            long * extPtr = realloc(*numArrayPtr, sizeof(long) * (cnt + 1));
            if ( ! extPtr ) {
                free(*numArrayPtr);
                return -2;
            }
            *numArrayPtr = extPtr;
            (*numArrayPtr)[cnt] = num;
            cnt += 1;
        }
    }
    
    return cnt;
}
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        long * array = NULL;
        int count = find_numbers(buf, &array);
        switch(count) {
            case -2:
                fprintf(stderr, "Memory error!\n");
                return 1;
            case -1:
                printf("Too many consecutive digits to save as number.\n");
                break;
            case 0:
                printf("No numbers found.\n");
                break;
            default: {
                int i;
                
                printf("Found numbers:\n");
                for ( i = 0; i < count; ++i )
                    printf("%ld\n", array[i]);
                
                free(array);
                break;
            }
        }
    }
    
    return 0;
}
1
16.10.2016, 18:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2016, 18:58

Найти восьмую степень числа, исопльзуя только умножение за три операции. Найти ошибку
Дано число a. Используя только умножение, получить значение a8 за три операции. нужен ввод 2-ой...

Операции со строками.Заменить в строке букву "а" на "с", если она стоит на чётном месте,и на "у" если на нечётном
Дана строка.Заменить в строке букву &quot;а&quot; на &quot;с&quot;, если она стоит на чётном месте,и на &quot;у&quot; если на...

Найти все числа в строке и вывести каждое число в отдельной строке (ошибка в коде)
Помогите пожалуйста с кодом. Задание такое: Найти все числа в строке, каждое число вывести в...


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

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

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