Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
 Аватар для Brinkley
1 / 1 / 0
Регистрация: 12.01.2017
Сообщений: 24

Немецкие буквы в Си

12.12.2019, 11:52. Показов 3644. Ответов 29

Студворк — интернет-сервис помощи студентам
Здравствуйте. Мне нужно посчитать количество немецких букв в файле. Имеются в виду специфические буквы: Ä, Ö, Ü.
Я считываю буквы через while, где решил поставить счётчик.
C
1
2
3
4
5
6
   char str;
    while(scanf ("%s", & str ) != EOF){
        if(str=='Ä'||str=='Ü'||str=='Ö'){
            count++;
        }
    }
При компиляции вылетает ошибка:
warning: multi-character character constant [-Wmultichar]
if(str=='Ä'||str=='Ü'||str=='Ö'){
Так происходит для всех трех букв в if.
Насколько я понял, здесь нужно использовать UTF-8. Как можно организовать ввод и проверку кода символа на соответствие коду немецкой буквы?
Заранее спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2019, 11:52
Ответы с готовыми решениями:

Немецкие символы транслитом
Есть к примеру немецкое слово Rössl. Как заменить 'ö' на 'o', что бы получилось Rossl. Такой символ может быть где угодно в слове.

Есть ли немецкие фирмы в Питере?
Хотела бы устроиться в немецкую фирму, но что-то не могу найти. Все попадаются американские, финские и еще какие-то. Может, кто-нибудь...

Вывод символов выше 127 (математические, немецкие и т.п)
Вообщем такая вот трабла. Надо выводить символы выше 127 (математические, немецкие и т.п) Как, как это делается в VC++... Плиз кто...

29
Evg
14.12.2019, 21:10
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от palva Посмотреть сообщение
Двоичные константы, по-моему, дают более наглядный код
Кому как. Мне намного быстрее понять, что делает код вида "x & 0xff00", чем "x & 0b11111111100000000"

0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
15.12.2019, 00:52
Здесь измененная, более правильная логика. Но пропало буквальное соответствие программы описанию UTF-8. (По крайней мере того, которым я пользуюсь). Ну и константы 16-ричные, это на любителя.
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
#include <stdio.h>
 
int readu(FILE *fi) {
    int ret, buf;
    buf = fgetc(fi);
    if(buf == EOF) return buf;
    if(buf < 0x80) return buf;
    if(buf < 0xF0) {
        if(buf < 0xE0) {
            if(buf < 0xC0) return EOF;
            else {
                ret = buf & 0x1F;
                buf = fgetc(fi);
                if(buf >= 0xC0) return EOF;
                ret <<= 6;
                ret |= buf & 0x3F;
            }
        }
        else {
            ret = buf & 0x0F;
            buf = fgetc(fi);
            if(buf >= 0xC0) return EOF;
            ret <<= 6;
            ret |= buf & 0x3F;
            buf = fgetc(fi);
            if(buf >= 0xC0) return EOF;
            ret <<= 6;
            ret |= buf & 0x3F;
        }
    }
    else return EOF;
    return ret;
}
 
void writeu(int buf, FILE *fo) {
    fputc(buf, fo);
    buf = buf >> 8;
    fputc(buf, fo);
}
 
 
int main() {
    FILE *fi, *fo;
    int buf;
    fi = fopen("infile.txt", "rb");
    fo = fopen("outfile.txt", "wb");
    while ((buf = readu(fi)) != EOF) {
        writeu(buf, fo);
    }
    fclose(fo);
    fclose(fi);
    return 0;
}
1
15.12.2019, 01:05

Не по теме:

Цитата Сообщение от palva Посмотреть сообщение
Ну и константы 16-ричные, это на любителя
Вам хорошо, а для меня вся эта функция с битами- на любителя ))

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
15.12.2019, 13:24
Цитата Сообщение от palva Посмотреть сообщение
Ну и константы 16-ричные, это на любителя
Вероятно, на протяжении 30 лет весь мир состоял сплошь из любителей, коль скоро обходились без двоичной записи в Си/Си++. Ну и, на всякий случай, в посте #21 я намеренно сделал ошибку и влепил на одну единичку больше, чем нужно. Просто чтобы убедиться, что подобная ошибка окажется никем не замеченной

А зачем ты в посте #22 испохабил код программы, введя операции сравнения типа "меньше" - я этого вообще не понимаю. По замыслу нужно было взять код из поста #14 и просто заменить в нём константы с двоичной записью на константы с шестнадцатеричной записью, чтобы получить переносимый код
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
15.12.2019, 14:02
Понял одно, то что вы - Олды, хорошо хорошо разбираетесь в побитовых операциях. Для меня сейчас стало важно, научиться писать код, добиваясь того, чтоб предупреждений никаких не было. А чтобы это научится делать, нужно понимать о чем конкретно предупреждает компилятор.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
15.12.2019, 16:09
Цитата Сообщение от мама Стифлера Посмотреть сообщение
А чтобы это научится делать, нужно понимать о чем конкретно предупреждает компилятор
Так компилятор обычно пишет об этом. В идеале лучше включать выдачу на английском языке, а то русскоязычный перевод зачастую понять намного сложнее
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
15.12.2019, 16:51
Цитата Сообщение от Evg Посмотреть сообщение
а то русскоязычный перевод зачастую понять намного сложнее
так вроде я с gcc работаю, там все на английском. Но мало того что англ. плохо знаю так еще и переводчик тупит, в итоге получается каша.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
15.12.2019, 16:59
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Но мало того что англ. плохо знаю
Это плохо. Английский нужно обязательно знать. О свободном общении речь не идёт, достаточно уметь читать профильные технические тексты. Без этого будет сложно. Поэтому когда есть возможность (преподают в школе, в институте, или какие-то курсы на работе) - по возможности всегда надо пользоваться, чтобы вытянуть себя хотя бы на минимальный уровень знаний
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
15.12.2019, 17:49
Цитата Сообщение от Evg Посмотреть сообщение
А зачем ты в посте #22 испохабил код программы, введя операции сравнения типа "меньше" - я этого вообще не понимаю.
Может и не надо было. Оптимизатор все равно сделает по-своему. Но замена выделения битов и сравнения на равенство обычным сравнением на неравенство выглядит шагом в сторону эффективности.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
15.12.2019, 18:29
Цитата Сообщение от palva Посмотреть сообщение
Но замена выделения битов и сравнения на равенство обычным сравнением на неравенство выглядит шагом в сторону эффективности
Ну разве что так. Правда конкретно в данном случае это не уместно. fgetc - чтение из файла (или любой другой сущности, которая попадает под абстракцию "файл"), оно работает сравнительно долго. На фоне этого экономия 1 такта на сравнение будет выглядеть экономией на спичках. А на суперскалярных и микроархитектурных процессорах скорее всего не даст вообще ничего. Но читабельность кода сильно усложняет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2019, 18:29

Заменить в исходном файле русские буквы ‘к’ на буквы ‘т’, буквы ‘т’ на буквы ‘к’, буквы ‘л’ на буквы ‘в’, буквы ‘в’ на
Задание: Заменить в исходном файле русские буквы ‘к’ на буквы ‘т’, буквы ‘т’ на буквы ‘к’, буквы ‘л’ на буквы ‘в’, буквы ‘в’ на буквы ‘л’.

Заменить в символьной строке все буквы "a" на буквы "b", a буквы "A" на буквы "B"
Здравствуйте,помогите пожалуйста написать программу .Напишите программу, которая заменяет в символьной строке все буквы a на буквы b , a...

Файл f содержит буквы латинского и русского алфавитов. Занести в файл h только латинские буквы, а в файл g - только русские буквы
Помогите пожалуйста!!! Файл f содержит буквы латинского и русского алфавитов. Занести в файл h только латинские буквы, а в файл g -...

Файл содержит буквы,посчитать буквы 'p'. нужно только найти ошибку
Помогите пожалуйста найти ошибку) Файл содержит буквы латинского алфавита. Подсчитать количество букв 'p' Если ввожу 1 строку, считает....

Из текста удалить все буквы в, которые стоят сразу после буквы с
Подскажите, как решить задание(текст должен вводится пользователем на русском)


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru