Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 50
1

В файле строчные буквы заменить заглавной, пару букв на цифры

26.11.2018, 01:29. Просмотров 2700. Ответов 10

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

Кода нет, так как не знаю что и писать. Нашел что-то здесь, но мой копилятор не согласен... Преобразовать строчные буквы в заглавные и наоборот

Спасибо ! =))

Добавлено через 4 часа 3 минуты
Примерно то что мне нужно сделать, но не понимю как здесь меняется в коде регистр букв Верх./Нижн.

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
char str[] = "ka";
char replece = 'e';
 
 
 
    if ((myf = fopen("e:\\test.txt", "r")) == NULL) { printf("Cannot open file.\n"); exit(1); }
    fgets(user_string, 300, myf);
    fclose(myf);
    if ((myf = fopen("e:\\test.txt", "w")) == NULL) { printf("Cannot open file.\n"); exit(1); }
 
    for (int begin_words = 0; begin_words < strlen(user_string); begin_words++)//  lower
    {
        words[begin_words] = isupper(user_string[begin_words]);
        if (words[begin_words])
        {
            char c;
            c = user_string[begin_words];
            user_string[begin_words] = c + 32;
 
        }
 
    }
 
for (int i = 0, j = 0; i < strlen(user_string); i++, j++) //  replace
    {
        if (user_string[i] == str[0] && user_string[i + 1] == str[1])
        {
            fputc(replece, myf);
            pos_ki[j] = 1;
            i++;
 
        }
        else
        {
            fputc(user_string[i], myf);
        }
        printf("\n%d ", pos_ki[i]);
    }
    
    fclose(myf);
Здоровенные названия ...ни чего не ясно...

Добавлено через 2 часа 19 минут
В коде ниже меняет ЗАГЛАВНУЮ первую букву, и то только латинскую, и не записывает в файл....может кто-то всетаки поможет(((


C
1
2
3
4
5
6
7
8
9
10
fp = fopen("G:\\c++\\ЛБ-7 (В ПРОЦЕССЕ)\\test.txt", "a+");
 
        for (i = 0; i < strlen(str); ++i)
        {
            islower(str[i]);
            str[i] = toupper(str[i]);
 
            fclose(fp);
            printf("%s", str);
            _getch();
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2018, 01:29
Ответы с готовыми решениями:

Заменить строчные буквы прописными и повторить цифры
Распечатать введенную строку, заменив строчные буквы, прописными и повторив дважды каждую цифру. ...

Первые буквы всех слов заменить на заглавные остальные буквы на строчные
Заголовок (Строка, в которой первые буквы всех слов заменены на заглавные остальные буквы на...

Заменить строчные буквы на заглавные
после комбинаций :точка и ли пробел точка void main() { char s; int r; r=0; while...

Заменить строчные буквы прописными и наоборот
Написать программу на языке &quot;C&quot; codegear, которая в указанном текстовом файле, заменяет все...

Заменить строчные латинские буквы в слове заглавными
Программа должна заменять каждую n-ную букву в слове на заглавную , если это буква английского...

10
ft4l
Невнимательный
433 / 357 / 126
Регистрация: 08.02.2013
Сообщений: 1,001
Записей в блоге: 2
26.11.2018, 07:21 2
Цитата Сообщение от Arthur80321 Посмотреть сообщение
и то только латинскую
  • __________ KOI8-R __________
    a3 ё
    b3 Ё
    c0-cf юабцдефгхийклмно
    d0-df пярстужвьызшэщчъ
    e0-ef ЮАБЦДЕФГХИЙКЛМНО
    f0-ff ПЯРСТУЖВЬЫЗШЭЩЧЪ
  • __________ CP 1251 __________
    a8 Ё
    b8 ё
    c0-cf АБВГДЕЖЗИЙКЛМНОП
    d0-df РСТУФХЦЧШЩЪЫЬЭЮЯ
    e0-ef абвгдежзийклмноп
    f0-ff рстуфхцчшщъыьэюя
  • __________ ISO 8859-5 __________
    a1 Ё
    b0-bf АБВГДЕЖЗИЙКЛМНОП
    c0-cf РСТУФХЦЧШЩЪЫЬЭЮЯ
    d0-df абвгдежзийклмноп
    e0-ef рстуфхцчшщъыьэюя
    f1 ё
  • __________ СР 866 __________
    80-8f АБВГДЕЖЗИЙКЛМНОП
    90-9f РСТУФХЦЧШЩЪЫЬЭЮЯ
    a0-af абвгдежзийклмноп
    e0-ef рстуфхцчшщъыьэюя
  • __________ MacOS_Cyrillic __________
    80-8f АБВГДЕЖЗИЙКЛМНОП
    90-9f РСТУФХЦЧШЩЪЫЬЭЮЯ
    dd-df Ёёя
    e0-ef абвгдежзийклмноп
    f0-fe рстуфхцчшщъыьэю
  • __________ UTF-8 __________
    401 Ё
    410-41f АБВГДЕЖЗИЙКЛМНОП
    420-42f РСТУФХЦЧШЩЪЫЬЭЮЯ
    430-43f абвгдежзийклмноп
    440-44f рстуфхцчшщъыьэюя
    451 ё
Если есть желание сделать русскими буквами.
И если никто нигде не ошибся
1
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 50
26.11.2018, 16:05  [ТС] 3
С латиницей сделал... Только результат в другой файл записывает....
С кириллицей ошибка. Может кто-нибудь знает как испраить ? Если вообще это кому-то интресно разбирать...3 лабы осталось сдать ...эх..

вот код:

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 <locale.h> 
#include <windows.h>
...........
        setlocale(LC_ALL, "Rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
char c;
 
        if ((fp = fopen("G:\\c++\\ЛБ-7 (В ПРОЦЕССЕ)\\test.txt", "r")) == NULL) {
            printf("Невозможно открыть файл.\n"); exit(1);
        }
        fpout = fopen("G:\\c++\\ЛБ-7 (В ПРОЦЕССЕ)\\test2.txt", "w");
 
        while ((c = fgetc(fp)) != EOF) {
 
            if (islower(c))
                c = toupper(c);
            fputc(c, fpout);
        }
 
        fclose(fp);
        fclose(fpout);
Спасибо.
0
Изображения
Тип файла: png 1111.png (20.1 Кб, 0 просмотров)
ft4l
Невнимательный
433 / 357 / 126
Регистрация: 08.02.2013
Сообщений: 1,001
Записей в блоге: 2
26.11.2018, 21:39 4
c>=-1 && c<=255
// 225 можно использовать только с unsigned char (не с char)
// >=-1 как-бы тогда не применимо

И Вы так и не сказали , в какой кодировке текст в файле.
Если нужно только 1251 то вроде в виндовс стандартные функци работают с ним
например здесь примеры
не уверенн насчёт других локалей.
с utf и юникодами всё посложнее будет.

Добавлено через 1 минуту
(char) -1 вроде и есть 255

Добавлено через 4 минуты
Цитата Сообщение от ft4l Посмотреть сообщение
__________ СР 866 __________
f0-f1 Ёё
1
26.11.2018, 21:39
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 50
26.11.2018, 23:21  [ТС] 5
На счет кодировки не знаю....
Из-за того, что вместо русских букв в файле "абракадабра"...прописал :
C
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
В задании работа с русскими буквами....
Каждую строчную букву поменять на заглавную букву, кроме того пару букв "ли" заменить на "1".
(смысл давать задание если оно не выполнимо на Си. Прочесть об этом знать бы где...не точто бы не искал... )

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

Смотрел и здесь : https://www.codeproject.com/Articles...mozTocId138366 - вылет с ошибкой. Но может что-то не так делал..там не ясно мне...
Это вообще решаемо, что бы не дурить головы людям?

Если ставлю как в "ошибке" -1 ....255 ---- не вылетает но в файле 0 байт (перезаписывает пустым).

Добавлено через 6 минут
Простите.... но это __________ СР 866 __________ f0-f1 Ёё Как применять.... ?

Добавлено через 30 минут
И кодировку в файле пытался менять. Он создается в ANSI

Добавлено через 52 минуты
Решил - с русскими буквами, если не работает то и ладно...можно так сдать, оказывается. Спасибо!!!
0
ft4l
Невнимательный
433 / 357 / 126
Регистрация: 08.02.2013
Сообщений: 1,001
Записей в блоге: 2
27.11.2018, 00:44 6
Лучший ответ Сообщение было отмечено Arthur80321 как решение

Решение

Цитата Сообщение от Arthur80321 Посмотреть сообщение
f0-f1 Ёё Как применять
Это написал как то что пропустил в первом посте

Цитата Сообщение от Arthur80321 Посмотреть сообщение
Он создается в ANSI
Не знаю почему так получается, байты в любой кодировке байты
, насчёт 255 и -1
фактически std call (если правильно назвал) функции принимающие параметры размером 1,2 байта
на самом деле оперируют параметрам в 4 байта извлекая из них данные нужного размера.
В связи с реализацией вызова этих функций.
// в этом смысле возможно был не прав утверждая что 255 не может быть char
например по документации int toupper(int ch); //не toupper(uns.. char ch)

И затрудняюсь сказать как правильно решается Ваша задача
У меня например эти toupper() islower() работают с cp1251
Но по непонятным мне причинам сравнение с EOF и feof() не работает так как ожидается
, побайтовое чтение нормальным способом добавляет 0xFF в конце файла.
И смог от этого избавиться только например таким извращением
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
#include <locale.h>
#include <stdio.h>
#include <ctype.h>
// GCC
 
int main(void)
{
    unsigned char c; // не char c;
    FILE *fp, *fpout;
 
//    SetConsoleCP(1251);
//    SetConsoleOutputCP(1251);
//------- мне без разницы , код в cp866 --------------
 
  puts(setlocale(LC_ALL, ""));
  puts("\n-------------------\n");
  // у меня показывает Russian_Russia.1251
  //файл "../descript.ion" тоже в кодировке cp1251
 
    if ((fp = fopen("../descript.ion", "r")) == NULL) {
            printf("Невозможно открыть файл.\n");
            return 0;
        }
    if ((fpout = fopen("descript.ion.txt", "w")) == NULL) {
            printf("Невозможно открыть файл.\n");
            return 0;
    }
    while((c = fgetc(fp)) && !feof(fp)) { // прерывание цикла на шаг впереди
        //c = fgetc(fp);
        ////if (c==EOF) printf("\t\tEOF\n");
        if (c == 0xEB){ //cp1251 'л' у меня другая кодировка
            if ((c = getc(fp)) == 0xE8) {
                fputc('1', fpout);//cp1251 'и' у меня другая кодировка
                continue;
            }
            else
                fputc(toupper(0xEB), fpout);// или  0xCB 'Л'
                if (feof(fp)) break;// тоже на шаг впереди
        }
        if (islower(c))
            c = toupper(c);
        fputc(c, fpout);
    }
 
 
        fclose(fp);
        fclose(fpout);
 
  return 0;
}
1
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 50
27.11.2018, 01:04  [ТС] 7
Спасибо!!! Сейчас же буду проверять !!!

Добавлено через 12 минут
Очень даже круто, и все работает !!!!! Спасибо Огромное !!! Буду изучать этот код !!! =)))))) Здоровья тебе Человечище ! =)))))
0
ft4l
Невнимательный
433 / 357 / 126
Регистрация: 08.02.2013
Сообщений: 1,001
Записей в блоге: 2
27.11.2018, 01:10 8
else не нужно т.к. блок после if заканчивается continue;
1
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 50
27.11.2018, 01:32  [ТС] 9
А где ты эту кодировку смотрел, где искать? Возможно еще не раз придется делать так как ты....
0xEB это (int)235 пишет... хм заработает ли с десятичной...
0
ft4l
Невнимательный
433 / 357 / 126
Регистрация: 08.02.2013
Сообщений: 1,001
Записей в блоге: 2
27.11.2018, 04:12 10
Лучший ответ Сообщение было отмечено Arthur80321 как решение

Решение

Цитата Сообщение от Arthur80321 Посмотреть сообщение
где искать
Трудно сказать...
гугл находит в сети , но не всегда в удобном формате, и не всегда без лишнего содержимого.
Start->Run->Charmap в винде тоже не оч удобно искать по шрифтам Terminal,MS Serif,Arial(688,1251,юникод),
зато под рукой.
Если символы печатные, проще всего посмотреть блокнотом, который поддерживает нужные кодировки.
Чем сгенерировать файл с символами уже дело привычек , вкусов и предпочтений
Напрмер , если есть perl и Akelpad что-то такое можно выполнить в комманднй строке,
Windows Batch file
1
\x\perl\bin\perl -e "print $_ .' '.chr($_).$/ for(32..255);" > test.txt & \P\AkelPad\32\AkelPad.exe /OpenFile("test.txt", 1251, -1)
1
Arthur80321
3 / 1 / 2
Регистрация: 06.10.2018
Сообщений: 50
27.11.2018, 22:17  [ТС] 11
Не хотел вас больше беспокоить. И новую тему создал с другим немного вопросом.... но там тишина
Код работает.

Может быть сталкивались с таким:

След пункт в задании расшифровать - выполнил, почти....

(Ни чего нового не изобрел, просто поменял местами значения ).
При расшифровке переводит в строчные ВСЁ что попадается, и ВСЕ "1" меняет на "ли"
Если в тексте изначально не будет единиц "1", сдам....

Какой может быть способ, что бы места с изменениями "запоминать" ? И заменить регист с буквами в нужных местах.

Есть программа работающая с точностью наоборот, но только с англ. языком. Часть в первом сообщении, но там же не разобрать почти, как это происходит...+ скинул туда не првильно (не все переменные и пр.)
0
27.11.2018, 22:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2018, 22:17

Заменить строчные буквы на прописные, цифры повторить дважды
Распечатайте введенную строку. В данной строке нужно заменить строчные буквы на прописные и...

В текстовом файле заменить прописные буквы на строчные
Дан символьный файл f. Получите файл g, образованный из файла f заменой всех его прописных букв...

Строки: заменить заглавные буквы на строчные, сместить цифры в начало
Ребят, не могли бы сделать набросок программки: 1. Ввести строку до символа '\0'; Размер 100...


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

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

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