Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2020, 12:57   #1
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
Восклицание Си, символьные строки

Помогите пожалуйста с кодом! Дан символьный массив, необходимо без использования функции string удалить из массива все запятые предшествующие первой точке, и заменить знаком '+' все цифры 3, стоящие после этой точки. Не знаю, как сделать, чтобы он определял, что точка первая, а не во всем массиве удалял. Возможно как-то с использованием указателей, но не могу воплотить в свою программу, поэтому прошу о помощи. Помогите пожалуйста на подобие моего кода выполнить задание. Рекурсию еще не учили. Заранее спасибо за помощь!

Код:
#include<stdio.h>

int main()
{
    char a[30]; 
    int i = 0; 
    char c, d;
    printf("Vvedite stroku:\n");
    do 
    {
        c = getchar(); 
        if (c != ',')
        {
            a[i] = c;
            i++;
        }
    } while (c != '\0'); 
    a[i] = '\0';   
    printf("%s\n", a);
    return 0;
}
Artemii21 вне форума Ответить с цитированием
Старый 04.04.2020, 15:18   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Обычно сначала строка вводится, а потом только делаются преобразования по условию, а то так получается сделать проще. Заведите флажок dot. Потом при чтении символа сначала проверяйте флажок, если он пока не поднят, то пропускайте запятые и проверяйте символ на точку для поднятия флажка, а если поднят, то проверяйте на цифру 3 для замены на плюс.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.04.2020, 15:41   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Вначале введи массив символов, а потом займись обработкой.
Опиши две переменные, которые будут индексами при просмотре массива, например, m и n.
- m меняется от начального элемента массива, до последнего
- n - указывает на свободное место, куда можно копировать элемент массива.
Опиши переменную flag, которая будет иметь значение False (0), пока не найдена точка.
В цикле просматриваешь массив.
Если очередной символ - точка, то устанавливаешь флаг в true (1).
Если флаг false и очередной символ запятая, то увеличиваешь только m, а иначе: m и n.
Перезаписываем элемент массива: A[n] = A[m];
Если флаг true и очередной символ цифра, то записываем символ +

PS: Как успел, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 04.04.2020, 22:03   #4
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
По умолчанию

Почему из-за присвоении элементу значения +, прога не работает?
Код:
#include<stdio.h>

int main()
{
char str[30];
int i=0;
printf("Vvedite slovo: "); gets(str);
int flag=0;

while(str[i])
{
        if (str[i]=='.')
        {
        flag=1;
        }
        if ((!(flag==0&&str[i]==','))&&(!(flag==1)&&str[i]=='3'))

        {
            str[i]='+';
            printf("%c",str[i]);
              }
        i++;
}
return 0;
}
Artemii21 вне форума Ответить с цитированием
Старый 04.04.2020, 22:58   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

А без присвоения работает? Что-то вы сразу много всего проверяете в последнем if. И результат лучше печатать после цикла printf("%s", str);.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.04.2020, 23:10   #6
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
По умолчанию

Да, без присвоения не работает. А как тогда грамотно разместить?
Artemii21 вне форума Ответить с цитированием
Старый 04.04.2020, 23:28   #7
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
По умолчанию

Язык -Си
Artemii21 вне форума Ответить с цитированием
Старый 04.04.2020, 23:38   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
while (str[i]) {
    if (flag) {
        if (str[i] == '3') {
            str[i] = '+';
        }
    } else {
        if (str[i] == '.') {
            flag = 1;
        } else if (str[i] == ',') {
            printf("need delete comma on place %d\n", i);
        }
    }
    ++i;
}
printf("%s", str);
Вот, например, if. Но без удаления запятых. Нужно его немного переписать, как предлагает ViktorR. То есть сделать 2 счетчика, правильно их менять, не забыть в последний символ строки записать '\0' после окончания обработки и до печати.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 04.04.2020 в 23:41.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьные строки C++ zusohegomi Помощь студентам 1 27.10.2015 19:59
Символьные строки andriy1048 Помощь студентам 5 30.06.2015 16:27
Символьные строки в Си Вероника99 Помощь студентам 2 16.12.2013 21:12
Символьные строки Арнис Общие вопросы C/C++ 2 18.09.2010 22:59
Символьные строки Арнис Общие вопросы C/C++ 1 13.07.2010 14:04