С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
6 / 8 / 8
Регистрация: 06.10.2017
Сообщений: 269

Как сравнить строки?

18.04.2018, 15:48. Показов 3311. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я сравниваю строки
если ввожу допустим
11111111
222222222
9
то программа выводит 9 как исправить?

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
#include <iostream>
#include <cstring>>
 
 
using namespace std;
 
int main()
{
    string s1,s2,s3;
cin>>s1>>s2>>s3;
 
if(s1>s2&s1>s3)
{
    cout<<s1;
}
 
    if (s2>s1&s2>s3)
    {
 
    cout<<s2;
    }
 
        if (s3>s1&s3>s2)
        {
 
 
            cout<<s3;
        }
 
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2018, 15:48
Ответы с готовыми решениями:

Как сравнить строки?
Бобрый день. Подскажите пжалста, как можно сравнить строки без учета регистра (шобы самому не писать функцию перевода в нижний регистр). ...

Как сравнить две строки?
Написал программу но не проходит сравнение вот это сравнение: bool flight_weight(char* flight) { if (predmet==flight) return...

Как сравнить строки в многомерном массиве?
Мне нужно сравнить строки в многомерном массивы и вывести количество одинаковых. Код работает не так надо. #include &lt;iostream&gt; ...

22
 Аватар для Hitoku
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
18.04.2018, 15:50
А что Вы хотите сравнивать-то?
0
6 / 8 / 8
Регистрация: 06.10.2017
Сообщений: 269
18.04.2018, 15:59  [ТС]
11111111
222222222
9

вот допустим такие строки сравнить и вывести большую
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.04.2018, 16:00
Марина1211, а чего Вы хотели? Все правильно!
Стока "9" больше остальных! В лексикографическом смысле (первый символ больше, значит вся строка больше).

Добавлено через 1 минуту
Большую, это в каком смысле? Самую длинную? Тогда сравнивайте длины строк.
0
6 / 8 / 8
Регистрация: 06.10.2017
Сообщений: 269
18.04.2018, 16:17  [ТС]
я добавила length() вроде она правильно должна считать но вообще ничего не выводит

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
#include <iostream>
#include <cstring>>
 
 
using namespace std;
 
int main()
{
    string s1,s2,s3;
 
cin>>s1>>s2>>s3;
 
if(s1.length()>s2.length()&s1.length()>s3.length())
{
    cout<<s1;
}
 
    if (s2.length()>s1.length()&s2.length()>s3.length())
    {
 
    cout<<s2;
    }
 
        if (s3.length()>s1.length()&s3.length()>s2.length())
        {
 
 
            cout<<s3;
        }
 
 
}
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.04.2018, 16:36
Лучший ответ Сообщение было отмечено Марина1211 как решение

Решение

C++
1
2
3
4
5
6
7
8
    if(s1.length()>s2.length()&&s1.length()>s3.length())
        cout<<s1;
    else if (s2.length()>s1.length()&&s2.length()>s3.length())
        cout<<s2;
     else if (s3.length()>s1.length()&&s3.length()>s2.length())
        cout<<s3;
    else
        cout << "No";
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
18.04.2018, 16:51
Марина1211, можно конечно получше но Ваш код вполне рабочий (для слов но не для строк). и не учитываете возможные равенства длин. последними строками поставьте
C++
1
2
3
system("pause");
return 0;
}
строка 2 последнюю птичку del
0
6 / 8 / 8
Регистрация: 06.10.2017
Сообщений: 269
18.04.2018, 16:52  [ТС]
не все тесты проходит
5 7 3 максимум 7
189285 283 4958439238923098349024 максимум 4958439238923098349024

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

Входные данные
В первой строке входного файла INPUT.TXT записаны три натуральных числа через пробел. Каждое из чисел не превышает 10100. Числа записаны без ведущих нулей.

Выходные данные
В выходной файл OUTPUT.TXT нужно вывести одно целое число — максимальное количество монет, которые может взять вождь.


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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <cstring>>
 
 
using namespace std;
 
int main()
{
    string s1,s2,s3;
 
cin>>s1>>s2>>s3;
 
if(s1.length()>s2.length()&s1.length()>s3.length())
{
    cout<<s1;
    return 0;
}
 
    if (s2.length()>s1.length()&s2.length()>s3.length())
    {
 
    cout<<s2;
    return 0;
    }
 
        if (s3.length()>s1.length()&s3.length()>s2.length())
        {
 
 
            cout<<s3;
            return 0;
        }
 
if(s1.length()==s2.length())
    for(int i=0;i<1020;i++)
    if(s1[i]>s2[i])
    {
    cout<<s1;
    return 0;
    }
     else
     {
 
        cout<<s2;
     return 0;
     }
 
     if(s1.length()==s3.length())
    for(int i=0;i<1020;i++)
    if(s1[i]>s3[i])
    {
    cout<<s1;
    return 0;
    }
     else
     {
 
        cout<<s3;
     return 0;
     }
 
     if(s2.length()==s3.length())
    for(int i=0;i<1020;i++)
    if(s2[i]>s3[i])
    {
    cout<<s2;
    return 0;
    }
     else
     {
 
        cout<<s3;
     return 0;
     }
 
 
 
 
 
}
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.04.2018, 17:01
Марина1211, во-первых, поменяйте & на &&
Ну так и надо было сказать, что надо сравнивать числовое значение строк
Задайте не строки, а числа! И вводите их! Получите три числа, которые и сравнивайте себе на здоровье...
Числа, наверно, следует задать, как безнаковые целые
0
6 / 8 / 8
Регистрация: 06.10.2017
Сообщений: 269
18.04.2018, 17:03  [ТС]
4958439238923098349024 не в какой тип данных не помещается
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
18.04.2018, 17:04
Цитата Сообщение от Марина1211 Посмотреть сообщение
но не проходит такое решение тесты
обратите внимание:
Цитата Сообщение от Yetty Посмотреть сообщение
не учитываете возможные равенства длин
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.04.2018, 17:06
Если числа будут unsigned int, то возможное максимальное число 4294967295

Добавлено через 1 минуту
Хорошо, еще вариант: напишите свою процедуру сравнения числовых строк, с учетом длины строки, и значения.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.04.2018, 17:08
Цитата Сообщение от Марина1211 Посмотреть сообщение
C++
1
#include <cstring>>
В конце одна угловая скобка лишняя. И для библиотечных строк типа std::string надо подключать другой заголовочный файл - не cstring, а string:
C++
1
#include <string>
Ну и, конечно, для соединения условий надо использовать два амперсанда &&.
0
6 / 8 / 8
Регистрация: 06.10.2017
Сообщений: 269
18.04.2018, 17:09  [ТС]
ну вот например проверка если одинаковые
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(s2.length()==s3.length())
    for(int i=0;i<1020;i++)
    if(s2[i]>s3[i])
    {
    cout<<s2;
    return 0;
    }
     else
     {
 
        cout<<s3;
     return 0;
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.04.2018, 17:10
Hitoku, Марина1211, действительно, давайте обсуждать здесь, не будем плодить сущности!!
Выяснили, что надо сравнивать числовое значение длинных строк.
Я предложил написать свою процедуру сравнения таких строк, с учетом длины строк и их значения.

Ту тему предлагаю удалить.
0
18.04.2018, 17:15

Не по теме:

liv, Марина1211, темы были объеденены

0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.04.2018, 17:21
Лучший ответ Сообщение было отмечено Марина1211 как решение

Решение

Цитата Сообщение от Марина1211 Посмотреть сообщение
4958439238923098349024 не в какой тип данных не помещается
Напишите свой тип BigInt или воспользуйтесь большими числами из того же Boost'a, например.
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.04.2018, 17:25
Цитата Сообщение от gru74ik Посмотреть сообщение
Напишите свой тип BigInt
не надо здесь это
Надо просто сравнить! Для этого достаточно сравнить длины и при равенстве длин сравнить значение.
Ну еще перед этим надо проверить на незначащие нули.
0
6 / 8 / 8
Регистрация: 06.10.2017
Сообщений: 269
18.04.2018, 17:33  [ТС]
лидируещих нулей нет в тестах
ну вот уже около 100 строчек все тесты должна держать но нет...

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <string>
 
 
 
using namespace std;
 
int main()
{
    string s1,s2,s3;
 
cin>>s1>>s2>>s3;
 
if(s1.length()>s2.length()&s1.length()>s3.length())
{
    cout<<s1;
    return 0;
}
 
    if (s2.length()>s1.length()&s2.length()>s3.length())
    {
 
    cout<<s2;
    return 0;
    }
 
        if (s3.length()>s1.length()&s3.length()>s2.length())
        {
 
 
            cout<<s3;
            return 0;
        }
 
int i;
if(s1.length()==s2.length()==s3.length())
    for(int i=0;i<1020;i++)
    {
 
    if(s1[i]>s2[i]&&s1[i]>s3[i])
    {
 
        cout <<s1;
          return 0;
    }
        if(s2[i]>s1[i]&s2[i]>s3[i])
        {
 
 
        cout <<s2;
    return 0;
}
 
 
 
        if(s3[i]>s2[i]&s3[i]>s1[i])
        {
 
 
        cout <<s3;
          return 0;
        }
 
     }
 
 
 
 
 
 
 
 
if(s1.length()==s2.length())
    for(int i=0;i<1020;i++)
    if(s1[i]>s2[i])
    {
    cout<<s1;
    return 0;
    }
     else
     {
 
        cout<<s2;
     return 0;
     }
 
     if(s1.length()==s3.length())
    for(int i=0;i<1020;i++)
    if(s1[i]>s3[i])
    {
    cout<<s1;
    return 0;
    }
     else
     {
 
        cout<<s3;
     return 0;
     }
 
     if(s2.length()==s3.length())
    for(int i=0;i<1020;i++)
    if(s2[i]>s3[i])
    {
    cout<<s2;
    return 0;
    }
     else
     {
 
        cout<<s3;
     return 0;
     }
 
 
 
 
 
}
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.04.2018, 17:43
Марина1211, не так Вы меня не поняли...
Вместо s1.length()>s2.length() и других сравнений (Кстати, почему не исправили & на && )
написать функцию типа int mycmp(string,string) и вызывать её mycmp(s1,s2)
Она должна вернуть -1, если первая меньше, 0, если равны, и 1, если больше
Внутри этой функции реализовать сравнение числовых строк, как я указал выше
Я понятно изложил? Если да - действуйте
Далее, анализируя результат сравнения числовых строк, принимайте решение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2018, 17:43
Помогаю со студенческими работами здесь

Vector - как сравнить записанные строки?
Здравствуйте. std::vector&lt;std::string&gt; g_Test; g_Test.push_back(&quot;One&quot;); g_Test.push_back(&quot;Two&quot;); ...

Как сравнить две строки типа string?
C типом char все просто. Поиск по Фамилии и имени. char name,name1,address, dom; int h=0; cout&lt;&lt;&quot;Введите...

Как сравнить две строки игнорируя различия в регистрах?
Дело в том, что нельзя использовать основные функции, в моей случае tolower, я очень затрудняюсь в написании кода%-)

Как сравнить две строки string, введенных с клавиатуры, и вывести на экран строку которая больше?
Как сравнить две строки string введенных с клавиатуры и вывести на экран строку которая больше ?

Сравнить каждое слово из заданной строки с первый словом каждой строки в файле
Ребят, помогите!!! Уже наверное неделю мучаюсь(( Что не так? все время какие то ошибки. Задача такова: Нужно сравнить каждое слово из...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru