Форум программистов, компьютерный форум CyberForum.ru

Функция сравнивает две строки, игнорируя различия в регистрах - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.80
Хиромант99
 Аватар для Хиромант99
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 19
24.01.2011, 04:03     Функция сравнивает две строки, игнорируя различия в регистрах #1
Я студент 1 курса на зачёт сказали написать программку помогите!!
не хочу вылететь из универа
С++ Консоль

1. Функция сравнивает две строки, игнорируя различия в регистрах
2. Список студентов отсортировать по убыванию среднего балла.
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2011, 04:03     Функция сравнивает две строки, игнорируя различия в регистрах
Посмотрите здесь:

Разработать функцию, которая сравнивает две строки, игнорируя количество пробелов между словами C++
C++ Разработать функцию, которая сравнивает две строки, игнорируя количество пробелов между словами.
C++ функция getline считывает несколько строк из файла, игнорируя символ новой строки
Сравнить строки, игнорируя регистр C++
C++ Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
24.01.2011, 05:00     Функция сравнивает две строки, игнорируя различия в регистрах #2
1.
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
 
#define TEST(A, B) printf("`%s' compare `%s': %d\n", (A), (B), strcompare((A), (B)))
 
int strcompare(const char*, const char*);
 
int main()
{
    TEST("FooBar", "foobar");
    TEST("FoObAr", "FoobaZ");
    TEST("a", "AB");
    TEST("f", "Ab");
    TEST("a(B)c", "A(b)C");
    exit(0);
}
 
/* Возвращает ноль, если строки равны;
 * -1, если первая строка меньше второй;
 * 1, в противном случае (все без учета различий в регистре символов)
 */
int strcompare(const char* str1, const char* str2)
{
    for( ; *str1 && *str2; ++str1, ++str2)
    {
        if(tolower(*str1) < tolower(*str2))
            return -1;
        else if(tolower(*str1) > tolower(*str2))
            return 1;
   }
        
   return ((!*str1) && (!*str2) ? 0 : (!*str1) ? -1 : 1); 
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
24.01.2011, 14:51     Функция сравнивает две строки, игнорируя различия в регистрах #3
Задача 1
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 <cctype>
#include <iostream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
bool  string_eq_not_match_case(const T_str&  s_L, const T_str&  s_R)
{
    struct  T_symb_comp_not_match_case
    {
        bool  operator() (char L, char R)
        {
            return tolower(L) == tolower(R);
        }        
    };
    return    s_L.size() == s_R.size()
           && std::equal(s_L.begin(), s_L.end(), s_R.begin(), 
                         T_symb_comp_not_match_case());
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        std::cout << std::endl
                  << std::endl
                  << std::endl
                  << "Введите строки для сравнения без учета регистра:" 
                  << std::endl
                  << '\t'
                  << "-> ";
        T_str  s_L;
        getline(std::cin, s_L);
        if(s_L.empty()) break;
 
        std::cout << '\t'
                  << "-> ";
        T_str  s_R;
        getline(std::cin, s_R);
        if(s_R.empty()) break;
 
        std::cout << "Строки "
                  << (string_eq_not_match_case(s_L, s_R) ? "равны." : "не равны.")   
                  << std::endl;    
    }
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
24.01.2011, 15:49     Функция сравнивает две строки, игнорируя различия в регистрах #4
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<iostream>
#include<list>
using namespace std;
 
struct student: pair<string, float>{
    bool operator<(student a){
        return second>a.second;
    }
};
 
int main(){
    list<student> l;
    cout<<"Vvedite parametri studentov(0 to continue)\n";
    while(true){
        student a;
        cout<<"\nname= ";
        cin>>a.first;
        if(a.first=="0") break;
        cout<<"value= ";
        cin>>a.second;
        l.push_back(a);
    }
    l.sort();
    cout<<"\nAfter sorting: ";
    for(auto it=l.begin(); it!=l.end(); ++it){
        cout<<"\n\n"<<it->first<<"  "<<it->second;
    }
}
garkeP91
49 / 49 / 5
Регистрация: 24.10.2010
Сообщений: 131
24.03.2011, 23:43     Функция сравнивает две строки, игнорируя различия в регистрах #5
1.
Две строки без учета регистра сравниваются функциями strcmpi и stricmp.
Надо для них подключить библиотеку string.h
C++
1
#include<string.h>
C++
1
2
3
int strcmpi(string1,string2);
или
int stricmp(string1,string2);
Функции лексикографически сравнивает строки string1
и string2 и возвращает значение, обозначающее их соотношение так,
как показано ниже.

Значение Его смысл

меньше 0 string 1 меньше string 2

0 string 1 равна string 2

больше 0 string 1 больше string 2
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
25.03.2011, 05:47     Функция сравнивает две строки, игнорируя различия в регистрах #6
Цитата Сообщение от garkeP91 Посмотреть сообщение
Две строки без учета регистра сравниваются функциями strcmpi и stricmp.
Надо для них подключить библиотеку string.h
Эти функции нестандартные. К тому же преобразование регистра зависит от локали.
Yandex
Объявления
25.03.2011, 05:47     Функция сравнивает две строки, игнорируя различия в регистрах
Ответ Создать тему
Опции темы

Текущее время: 21:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru