Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.94
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
#1

Сравнить строки и по количеству символов, и по коду - C++

09.08.2011, 15:39. Просмотров 6875. Ответов 12
Метки нет (Все метки)

народ какая функция строки сравнивает, и по количеству символов, и по коду
strcmp - как-то плохо сравнивает у меня строка "9" больше строки "333"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2011, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнить строки и по количеству символов, и по коду (C++):

Сортировка вектора с демонстрационной диаграммой. Сравнить различные алгоритмы сортировок по количеству операций. - C++
Сортировка вектора.

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

Является ли ДНФ совершенной (критерий только по количеству символов в дизъюнкте) - C++
попробовал что-то через списки, отказывается принимать помогите пожалуйста #include <stdio.h> #include <conio.h> struct...

Получить из строк новую строку, содержащюю первые N1 символов строки S1 и последнии N2 символов строки S2 - C++
помогите написать программу на двух разных классах! 2) Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк...

Отсортировать строки матрицы по количеству нулей - C++
Здравствуйте! Извините за такую наглую просьбу, но уже не знаю, что делать :( В школе совершенно не было программирования, а теперь на...

вывод символов по коду (программа на с) - C++
Добрый вечер. Можете, пожалуйста, написать программу на си, которая считывает число и выводит на экран "слово", состоящее из символа с...

12
Сыроежка
Заблокирован
09.08.2011, 15:41 #2
Цитата Сообщение от Noname2512 Посмотреть сообщение
народ какая функция строки сравнивает, и по количеству символов, и по коду
strcmp - как-то плохо сравнивает у меня строка "9" больше строки "333"
На самом деле strcmp правильно сравнивает в лексикографическом порядке, так как '9' больше '3'. Вы лучше определитесь, по какому принципу вы хотите сравнивать строки. По крайней мере вы сами перед вызовом strcmp можете сравнить длины строк.
0
LosAngeles
Заблокирован
09.08.2011, 15:44 #3
strlen wcslen
0
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
09.08.2011, 16:02  [ТС] #4
Цитата Сообщение от Сыроежка Посмотреть сообщение
По крайней мере вы сами перед вызовом strcmp можете сравнить длины строк.
я так и сделал, хотелось просто все одной функцией , а то возникает
много всяких ветвлениий
0
Сыроежка
Заблокирован
09.08.2011, 16:10 #5
Цитата Сообщение от Noname2512 Посмотреть сообщение
я так и сделал, хотелось просто все одной функцией , а то возникает
много всяких ветвлениий
Я бы не сказал, что уж очень много ветвлений. Если я правильно понял вашу задачу, то, например, можно было бы так реализовать функцию

C++
1
2
3
4
5
6
7
8
int StrCompare( const char *s1, const char *s2 )
{
   int result = strlen( s1 ) - strlen( s2 );
 
   if ( result == 0 ) result =  strcmp( s1, s2 );
 
   return ( result );
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.08.2011, 16:13 #6
Тогда нужно сочетание strlen и strcmp
Например так

C++
1
2
3
4
5
if(strlen(s1)==strlen(s2))//проверка на одинаковость длин строк
if(strcmp(s1,s2) == 0)
{
    //строки идентичны
}
0
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.08.2011, 17:26 #7
Т.е. если в строках записаны 2 числа, то должно определятся наименьшее?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int cmp(const char *a, const char * b){
    if (strlen(a) > strlen(b)) return 1;
    if (strlen(a) < strlen(b)) return -1;
    for (int i = 0; a[i]; ++i)
    {
        if (a[i] > b[i])
            return 1;
        if (a[i] < b[i])
            return -1;
    }
    return 0;
}
0
Сыроежка
Заблокирован
09.08.2011, 18:19 #8
Цитата Сообщение от diagon Посмотреть сообщение
Т.е. если в строках записаны 2 числа, то должно определятся наименьшее?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int cmp(const char *a, const char * b){
    if (strlen(a) > strlen(b)) return 1;
    if (strlen(a) < strlen(b)) return -1;
    for (int i = 0; a[i]; ++i)
    {
        if (a[i] > b[i])
            return 1;
        if (a[i] < b[i])
            return -1;
    }
    return 0;
}
А цифры, между прочим, также располагаются в лексиграфическом порядке. Так что если речь идет о строках равной длины, в которых содержатся числа без знаков, то ваш алгоритм не имеет смысла. А если к тому же там записаны числа со знаками, или действительные числа, то ваш алгоритм вообще не работает.
0
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.08.2011, 18:24 #9
Цитата Сообщение от Сыроежка Посмотреть сообщение
Так что если речь идет о строках равной длины, в которых содержатся числа без знаков, то ваш алгоритм не имеет смысла.
Это почему?
Вы же сами написали

Цитата Сообщение от Сыроежка Посмотреть сообщение
А цифры, между прочим, также располагаются в лексиграфическом порядке.
Допустим 2 строки
122 и 123
3 символ в них различается, в первой строке он меньше, поэтому функция вернет -1.
Цитата Сообщение от Сыроежка Посмотреть сообщение
А если к тому же там записаны числа со знаками
Да ну?
Согласно ASCII минус имеет код 45, а цифры начинаются с кода 48.
Если одно из чисел имеет минус, то оно однозначно меньше другого, т.к. первый символ меньше. Разве что с длиной строк проблема будет. Но все-таки функция должна сравнивать строки, а не числа =)

Цитата Сообщение от Сыроежка Посмотреть сообщение
действительные числа
Опять же, функция сравнивает строки, а не числа, но могу найти у себя работающую функцию, сравнивающую 2 вещественных числа.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.08.2011, 20:27 #10
Что мешает написать функцию сравнения строк с числами не лексиграфически, а в натуральном виде?
По запросу "естественная сортировка" или "natural sort" можешь готовый предикат найти.
0
Даня98
29 / 29 / 8
Регистрация: 13.02.2010
Сообщений: 145
09.08.2011, 23:53 #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <fstream>
#include <string>
#include <algorithm>
int main()
{
    std:: string all,s="\0",s1="\0",s2="\0";
    int i=0;
    std:: ifstream ifs ("input.txt");
    ifs >> s >> s1 >> s2;
    int m = std:: max (s.size(), std:: max (s1.size(),s2.size()));
    while (s.size()<m) s.insert (0,"0");
    while (s1.size()<m) s1.insert (0,"0");
    while (s2.size()<m) s2.insert (0,"0");
    ifs.close();
    std:: ofstream ofs ("output.txt");
    ofs << std:: max(s,std::max(s1,s2));
    ofs.close();
    return 0;
}
Сравнение трех чисел я писал так. Сначала выбирается длина самой длинной строки, а затем все остальные строки приравниваются длинной к самой длинной добавлением нуля в начало.
0
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
17.04.2015, 14:28 #12
Мне вот че интересно, можно ли сравнивать строки с помощью ==? Или сравниваться будут лишь указатели на первый символ?

Добавлено через 31 минуту
Запутался че-то, по указателям-то ведь можно сравнить строки. Но почему нельзя пользоваться ==?
0
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
17.04.2015, 14:36 #13
Цитата Сообщение от tnk500 Посмотреть сообщение
можно ли сравнивать строки с помощью ==?
Для std::string можно, у них есть перегруженные операторы для сравнения char* и string. При сравнении двух указателей на char будут сравниваться именно указатели, а не содержимое строк.
0
17.04.2015, 14:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2015, 14:36
Привет! Вот еще темы с ответами:

Упорядочить строки матрицы по количеству одинаковых элементов - C++
Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке. Найти номер...

Определить номера символов в строках и сравнить их - C++
Здравствуйте. Помогите, пожалуйста, опыта очень мало. Задача такова: в случаях, когда левая круглая скобка не закрылась в этой же строке,...

Деление строки по количеству символов - Visual Basic .NET
Как можно без накручивания циклов сделать следующее? Есть длинная строка, символов на 100+. Состоит из слов с пробелами (например, пара...

В конец каждой строки через пробел добавляется число, которое равно количеству символов в самом длинном слове данной строки - C (СИ)
Помогите составить программу: Следует разработать программу, которая преобразует любой текстовый файл в другой текстовый файл по правилу,...


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

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

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