Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 194

Нужно написать программу, которая с командной строки берет файл, и заменяет в нем заглавные буквы на строчные и наоборот

19.10.2021, 17:30. Показов 1426. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пример: в input.txt текст "xDxD", а название программы "letters"
Code
1
2
$ ./letters input.txt
XdXd
У меня не получается часть с командной строкой, код, который меняет буквы у меня уже есть
C
1
2
3
4
5
6
7
8
9
10
11
12
char c;
while ((c=fgetc(fp)) != EOF)
  {
    if (c>='a' && c<='z')
  putchar(c - 'a' + 'A');
    else if (c>='A' && c<= 'Z')
  putchar(c - 'A' + 'a');
    else
  putchar(c);
  }
return 0;
}
Помогите пожалуйста с кодом, который проверял бы наличие аргументов в командной строке, и если они есть, то брал файл и менял в нем буквы =)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2021, 17:30
Ответы с готовыми решениями:

Заменить в тексте созданного файла все заглавные буквы строчными, а строчные - заглавными
Написать программу, которая заменяет в тексте созданного файла все заглавные буквы строчными, а строчные – заглавными. Измененный текст...

В текстовом файле заменить все строчные буквы прописными, и наоборот
Помогите с задачей пожалуйста! Написать программу, которая в текстовом файле, заменяет все строчные буквы прописными, и наоборот.

Составить программу, которая заменяет все заглавные буквы русского текста на строчные
Составить программу, которая заменяет все заглавные буквы русского текста на строчные

13
2492 / 1156 / 709
Регистрация: 25.04.2016
Сообщений: 3,323
19.10.2021, 17:37
int main (int argc, char *argv[])

argc - хранит количество аргументов командной строки, где самый первый аргумент - это имя исполняемого файла.
а массив argv[argc][] хранит сами аргументы в текстовом виде, т.е. каждая строка argv[] хранит отдельный аргумент командной строки.

Проверяйте количество argc, и затем смотрите, что у вас в argv.
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 194
19.10.2021, 17:51  [ТС]
Цитата Сообщение от stake-k26 Посмотреть сообщение
int main (int argc, char *argv[])
argc - хранит количество аргументов командной строки, где самый первый аргумент - это имя исполняемого файла.
а массив argv[argc][] хранит сами аргументы в текстовом виде, т.е. каждая строка argv[] хранит отдельный аргумент командной строки.
Проверяйте количество argc, и затем смотрите, что у вас в argv.

Добавил строки, начало выглядит сейчас так
C
1
2
3
4
5
6
7
8
9
#include<stdio.h>
#include<stdlib.h>
 
 
int main(int argc, char *argv[])
{ if (argc<2)
  {printf("Недостаточно аргументов в командной строке");
  }
  char fl[] = atof(argv[1]);
Выдает следующие ошибки:
Code
1
2
3
letters.c: In function ‘main’:
letters.c:10:15: error: invalid initializer
   10 |   char fl[] = atof(argv[1]);
0
2492 / 1156 / 709
Регистрация: 25.04.2016
Сообщений: 3,323
19.10.2021, 17:58
А зачем вы пытаетесь текстовый массив argv[1] привести к числовому значению, у вас же там имя файла должно быть, разве нет?
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 194
19.10.2021, 18:00  [ТС]
Цитата Сообщение от stake-k26 Посмотреть сообщение
А зачем вы пытаетесь текстовый массив argv[1] привести к числовому значению, у вас же там имя файла должно быть, разве нет?
да, и я абсолютно не понимаю, как это реализовать
atol тоже не работает, я без понятия как это сделать
0
2492 / 1156 / 709
Регистрация: 25.04.2016
Сообщений: 3,323
19.10.2021, 18:01
Попробуйте

C
1
2
3
4
char *filename = argv[1];
FILE *input = fopen(filename, r+);
if (input == NULL)
    нет такого файла..
ну и так далее.
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 194
19.10.2021, 18:05  [ТС]
Цитата Сообщение от stake-k26 Посмотреть сообщение
Попробуйте
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
#include<stdio.h>
#include<stdlib.h>
 
 
 
int main(int argc, char *argv[])
{
char *filename = argv[1];
FILE *input = fopen(filename, r+);
if (input == NULL)
    {printf("нет такого файла..");}
 
printf("Программа заменяет строчные буквы на заглавные и заглавные на строчные.\n");
 
char c;
while ((c=fgetc(input)) != EOF)
  {
    if (c>='a' && c<='z')
  putchar(c - 'a' + 'A');
    else if (c>='A' && c<= 'Z')
  putchar(c - 'A' + 'a');
    else
  putchar(c);
  }
return 0;
}
Выдает ошибки:
Code
1
2
3
4
5
6
7
8
9
$ gcc letters.c -o letters
letters.c: In function ‘main’:
letters.c:9:31: error: ‘r’ undeclared (first use in this function)
    9 | FILE *input = fopen(filename, r+);
      |                               ^
letters.c:9:31: note: each undeclared identifier is reported only once for each function it appears in
letters.c:9:33: error: expected expression before ‘)’ token
    9 | FILE *input = fopen(filename, r+);
      |                                 ^
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
19.10.2021, 18:09
stake-k26, lethe1337, вообще-то параметры открытия файла надо передавать строкой, т.е. "r+"
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 194
19.10.2021, 18:09  [ТС]
Все заработало, не хватало ковычек у "r+". Спасибо большое!
0
2492 / 1156 / 709
Регистрация: 25.04.2016
Сообщений: 3,323
19.10.2021, 18:16
Лучший ответ Сообщение было отмечено lethe1337 как решение

Решение

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
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
    if (argc < 2)
    {
        puts("Ошибка! Недостаточно аргументов в командной строке!");
        return 1;
    }
 
    char *filename = argv[1];
    FILE *input = fopen(filename, "r+");
    if (input == NULL)
    {
        puts("Ошибка! Нет такого файла.");
        return 1;
    }
 
    puts("Программа заменяет строчные буквы на заглавные и заглавные"
        " на строчные.\n");
 
    char c;
    while ((c = fgetc(input)) != EOF)
    {
        if (islower(c))
            c = toupper(c);
        else if (isupper(c))
            c = tolower(c);
        putchar(c);
    }
 
    fclose(input);
    return 0;
}
1
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 194
19.10.2021, 18:18  [ТС]
Спасибо за помощь =)
0
2492 / 1156 / 709
Регистрация: 25.04.2016
Сообщений: 3,323
19.10.2021, 18:23
Цитата Сообщение от liv Посмотреть сообщение
вообще-то параметры открытия файла
Ну да, вот только я пример на правах псевдокода приводил, там же видно по условию, что просто общий принцип алгоритма указан. Понадеялся, что ТС знает эти мелочи.

Добавлено через 44 секунды
lethe1337, не за что.
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 194
19.10.2021, 22:49  [ТС]
stake-k26, не подскажешь, где можно найти основы по С для совсем новеньких? 1 курс вуза, до этого с языком не был знаком от слова совсем и пишу на нем, получается, месяц
0
2492 / 1156 / 709
Регистрация: 25.04.2016
Сообщений: 3,323
20.10.2021, 06:56
lethe1337, для совсем новеньких можно пройти бесплатный курс "Введение в программирование (С++)" на степике, например.

Как вариант "Основы программирования на C. Задачи." там же.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2021, 06:56
Помогаю со студенческими работами здесь

Написать программу, которая заменяет все заглавные буквы строчными
Задание: Написать программу, которая заменяет все заглавные буквы строчными, а строчные – заглавными в заданной символьной строке.

Работа с файлами (программа,которая открывала бы файл и заменяла в нём комбинации 2 пробела на 1 пробел, строчные буквы после ' .' и ' ' на заглавные)
Здравствуйте! Помогите пожалуйста, нужно написать программу,которая открывала бы файл и заменяла в нём комбинации 2 пробела на 1 пробел,...

Заменить русские буквы на номера в алфавите и наоборот
Написать программу, которая заменяет русские буквы на номера в алфавите и наоборот.

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

Строка: Заменить все буквы «a» на буквы «б» и наоборот, как заглавные, так и строчные
Дана строка, состоящая только из букв. Заменить все буквы «a» на буквы «б» и наоборот, как заглавные, так и строчные. Например, при вводе...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru