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

Сравнение строк

31.03.2023, 17:31. Показов 1975. Ответов 20

Студворк — интернет-сервис помощи студентам
Сравнение строк
Даны две строки. Необходимо сравнить строки между собой без учёта регистра символов.

Входные данные:
Две символьных строки, записанные каждая с новой строки. Длина строк не более 50 символов.

Выходные данные:
yes если строки полностью совпадают, no в противном случае.
Sample Input:
Hello WorlD
hello world
Sample Output:
yes
По заданным параметрам в задачке, все работает, но на курсе есть проверки, они, вроде, рандомные, на втором тесте валюсь, как можно оптимизировать код уважаемые знатоки? Очень надеюсь, что логика моих каракуль ясна...
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
#include <stdio.h>
#include <string.h>
 
int main() {
    int k = 0, l = 0, i = 0, j = 0, m = 0, g = 0;
    char str1[100], str2[100];
    fgets(str1, 100, stdin);
    fgets(str2, 100, stdin);
    for (i = 0; str1[i]; i++) {
        if (str1[i] == '\n') {
            k = i - 1; 
        }
        if (str1[i] == ' ') {
            m = i;
        }
    }
    for (j = 0; str2[j]; j++) {
        if (str2[j] == '\n') {
            l = j - 1; 
        }
        if (str2[j] == ' ') {
            g = j;
        }
    }
    if (k == l && m == g) { 
        i = 0;
        while (str1[i] && str2[i] != '\n') {
            if (str1[i] != str2[i]) {
                str2[i] = str2[i] - 32;
            }
            i++;
        }
    }
    int n = strcmp(str1, str2);
    if (n == 0) {
        printf("yes");
    } else {
        printf("no");
    }
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.03.2023, 17:31
Ответы с готовыми решениями:

Сравнение строк
Создать структуру: Фамилия, возраст, образование, должность. Вывести данные о работниках старше 30-ти лет, не имеющих высшего образования. ...

Сравнение строк
Нужно написать программу, которая будет вычислять, является ли введённое число палиндромом, в десятичной системе счисления. Лидирующие нули...

Сравнение 2 строк
Здравствуйте ! Нужно написать функцию которая сравнивает две строки и проверяет можно ли из первой строки создать вторую ( т.е. -...

20
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
31.03.2023, 18:49
Для ASCII и по английски логика....

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
#include <ctype.h>
#include <string.h>
int _tmain()
{
    char str1[100] = { "HeLlo WorlD" }, str2[100] = { "hellO world" };
    // fgets(str1, 100, stdin);
    //fgets(str2, 100, stdin);
    
    for (int i = 0; str1[i]; i++) {
        if (isalpha((int)str1[i]) && (int)str1[i] < 97) {
            str1[i] = (int)str1[i] + 32;
        }   }
for (int i = 0; str2[i]; i++) {
    if (isalpha((int)str2[i]) && (int)str2[i] < 97) {
        str2[i] = (int)str2[i] + 32;
        }   }
//---------------------------       
if (!strcmp(str1, str2)) {
    printf("yes\n");
}
else {
    printf("no\n");
}
printf("%s \n", str1);
    printf("%s \n", str2);
        getchar();
    return 0;
}
Добавлено через 4 минуты
А в вашу логику я не вьехал. Наверное я тупой.

Добавлено через 2 минуты
Если надо по русски, надо алфавит писать, и с ним сравнивать... isalpha работать не будет.

Добавлено через 1 минуту
И коды символов могут быть разные, при разных кодировках.
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
31.03.2023, 19:13
Цитата Сообщение от Sunrise153381 Посмотреть сообщение
Sample Input:
Hello WorlD
hello world

А если, например, так будет:
Code
1
2
3
Sample Input:
  Hello WorlD
hello     world
то что должно выводить?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
31.03.2023, 20:50
analogov net, Логично сказать что нет, так как они не совпадают полностью
0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
31.03.2023, 21:36
Лучший ответ Сообщение было отмечено easybudda как решение

Решение

Цитата Сообщение от Donkix Посмотреть сообщение
Логично сказать что нет, так как они не совпадают полностью

Кликните здесь для просмотра всего текста

Тогда, например, так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>          
#include <ctype.h>
 
int strings_are_equal( const char *str1, const char *str2 ){
    while( *str1 || *str2 )
        if( tolower( *str1++ ) != tolower( *str2++ ) )
            return 0;
 
    return 1;
}
 
int main(){
    char first[] = "Hello WorlD",
        second[] = "hello world";
 
    printf( "%s\n", strings_are_equal( first, second ) ? "yes" : "no");
 
    return 0;
}
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
31.03.2023, 22:23

Такая же хрень....
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 00:07
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int _tmain()
{
    char str1[100] = { "HeLlo WorlD" }, str2[100] = { "hellO world" };
    // fgets(str1, 100, stdin);
    //fgets(str2, 100, stdin);
for (int i = 0; str1[i] || str2[i]; i++) {
        if (isalpha((int)str1[i]) && (int)str1[i] < 97 )
            str1[i] = (int)str1[i] + 32;
        if (isalpha((int)str2[i]) && (int)str2[i] < 97)
            str2[i] = (int)str2[i] + 32;
                }
//---------------------------       
if (!strcmp(str1, str2))printf("yes\n");
        else printf("no\n");
 
        getchar();
    return 0;
}
Добавлено через 1 час 2 минуты
Фантазия на тему, с русским вместе.

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
#include <ctype.h>
#include <string.h>
#include <locale.h>
 
char to_lower(char ch){//  --- При получении большой буквы, возвратит маленькую.
    static const char rlower[] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя ";
    static const char rupper[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ";
    int i = 0;
    while (rupper[i++] != ch && rupper[i]);
    if (rupper[i] != 0)ch = rlower[i-1];
        return ch;
}
 
int _tmain()
{
    //system("chcp 1251");
    setlocale(LC_ALL, "RUSSIAN");
    char str1[100] = { "HeLlo АВаСЯ WorlD" }, str2[100] = { "hellO АвасЯ world" };
for (int i = 0; str1[i] || str2[i]; i++){
    if ((int)str1[i] > 64 && (int)str1[i]< 91)
            str1[i] = (int)str1[i] + 32;
if ((int)str2[i] > 64 && (int)str2[i]< 91)
            str2[i] = (int)str2[i] + 32;
 
str1[i] = to_lower(str1[i]);
str2[i] = to_lower(str2[i]);
 
}
 
printf("%s \n", str1);
printf("%s \n", str2);
//---------------------------       
if (!strcmp(str1, str2))printf("yes\n");
        else printf("no\n");
 
        getchar();
    return 0;
}
Добавлено через 25 минут
Если подумать то можно функцию сделать вот так

C++
1
2
3
4
5
6
7
char to_lower(char ch){//  --- При получении большой буквы, возвратит маленькую.
    static char rlower[] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
    static char rupper[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
char *one = strchr(rupper, ch);
if (one)ch = rlower[one - rupper];
           return ch;
   }
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
01.04.2023, 00:59
Да вы шутите!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
int main(void) {
    wchar_t s1[BUFSIZ], s2[BUFSIZ];
 
    if (!setlocale(LC_ALL, "ru_RU.utf8"))
        return 1;
 
    printf("Первая строка: ");
    if (!fgetws(s1, BUFSIZ, stdin))
        return 1;
    printf("Вторая строка: ");
    if (!fgetws(s2, BUFSIZ, stdin))
        return 1;
    
    printf("%S\n", wcscasecmp(s1, s2) ? L"разные" : L"одинаковые");
 
    return 0;
}
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 01:47

wcscasecmp с рагами...
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 01:56
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 02:09

И локаль так не включаеться.
Вообщем на винде не работает.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
01.04.2023, 02:58
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вообщем на винде не работает
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
int main(void) {
    wchar_t s1[BUFSIZ], s2[BUFSIZ];
 
    if (!setlocale(LC_ALL, "ru_RU.utf8"))
        return 1;
 
    printf("Первая строка: ");
    if (!fgetws(s1, BUFSIZ, stdin))
        return 1;
    printf("Вторая строка: ");
    if (!fgetws(s2, BUFSIZ, stdin))
        return 1;
    
    // printf("%S\n", wcscasecmp(s1, s2) ? L"разные" : L"одинаковые");
    printf("%S\n", _wcsicmp(s1, s2) ? L"разные" : L"одинаковые");
 
    return 0;
}
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 11:19
C++
1
2
3
4
5
if (!setlocale(LC_ALL, "ru_RU.utf8"))
    {
        printf("%s\n","Вылетаю");
        getchar();  return 1;
    }
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 11:25

Она конечно выполняет, но с локалью проблемы.
Может только на MSVS ?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
01.04.2023, 11:28
Цитата Сообщение от Наталья8 Посмотреть сообщение
с локалью проблемы
Code
1
chcp 65001
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 11:56

Ещё есть Pelles С
Локаль так тоже не включаеться...
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 12:26
C++
1
2
system("chcp 65001");
    wprintf(L"Первая строка: ");
Простите дяденька. Надоело.
Ни когда не занимался такой хренью и не буду.
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 12:59

Пишите по английски. И всё будет ЗАЙ. зай зай..
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
01.04.2023, 13:10
Цитата Сообщение от Наталья8 Посмотреть сообщение
Ещё есть Pelles С
Локаль так тоже не включаеться...
Там локаль включается так:
C
1
setlocale(LC_ALL, "Ru");
По крайней мере у меня работает.
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,122
01.04.2023, 13:30
Такая локаль не подходит нужна извращённая...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2023, 13:30
Помогаю со студенческими работами здесь

Сравнение строк
Хочу сравнивать считанные названия файлов и сравнивать их с известными. Все работает хорошо, если нет строки char *btxt=&quot;2.txt&quot;;,...

Сравнение строк
Всем привет. Столкнулся с проблемой при сравнении строк. А проблема вот в чём: одну строку я считывал через fgets из файла, другую - через...

Нечеткое сравнение строк
Здравствуйте.Подскажите какую литературу можно почитать на тему &quot;Нечеткое сравнение строк&quot;? тему курсовой такую задали.спасибо)

Сравнение коротких строк
строки меньше 8 символов можно сравнивать представив их числом вот маленький примерчик #include &lt;stdio.h&gt; #include...

Сравнение строк printf
#include &lt;criterion/criterion.h&gt; #include &lt;stdio.h&gt; char* apple(int); Test(add_test, should_square_integer) { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru