Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сравниваю два массива типа char (C), запутался полностью :( 
:(
    Опции темы
ressac
Дата 1.4.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



вообще предположим что у меня есть два массива типа char и мне надо их сравнить

1 - "AEP01363F"
2 - "C04SJJ4G3"

как я понял просто if'ом smile у меня не получится сделать а первому элементу только это делать тоже тупа, начал вспоминать все функции что знаю smile так ничего и не вспомнил :(,
PM MAIL   Вверх
apook
Дата 1.4.2007, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



чтоб лучше понять сам напиши функцию сравнения  smile 
а так strcmp stricmp  ну strstr

Это сообщение отредактировал(а) apook - 1.4.2007, 10:19

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  strcmp.zip 1,02 Kb


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Fazil6
Дата 1.4.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



strcmp(const char*, const char*)
PM MAIL   Вверх
threef
Дата 1.4.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Код



int compare(char *s1,char *s2)
{
    while(*s1 && *s2 && (*s1++==*s2++) );
    return *s1>*s2?1 :
                      *s1<*s2 ? -1 : 0;
}
                 
                       


PM MAIL   Вверх
ressac
Дата 1.4.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



блин, чё то думал что strcmp сравнивает по длине массива smile

ладно всем спасибо smile


apook, спасиб за хтмл, хорошее объяснение smile
PM MAIL   Вверх
ressac
Дата 1.4.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



threef,  smile  smile  я родом из Запорожьяsmile)
PM MAIL   Вверх
ressac
Дата 1.4.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



не подходит мне strcmp() если равнять массивы разных размеров то результат не верный...
PM MAIL   Вверх
apook
Дата 1.4.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Ты в вопросе указал два массива одинакого разм
тогда вопрос звучит по другому:
Входит ли подстрока b в строку a
strstr обрати внимание


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 1.4.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



что я не совсем понимаю...

вот тебе дано 4 массива, поступающих по одному в файл, и их надо записать в правильном порядке (нисходящем), чем тут поможет strstr? ведь она будет искать схожесть в массивах, а если её не будет то всё будет записано в том порядке в котором пришло, понимаешь?

"abc"

"@e1f3"

"194!."

"@13fg"


PM MAIL   Вверх
apook
Дата 1.4.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



strstr даст положительный ответ если в строке напр str_1 содержится 
строка str_2
Код

char *str_1="Open_Source", *str_2="Open";

if( strstr(str_1, str_2) ) printf( "Строка %s содержится в строке %s", str_2, str_1 );

а в твоем случае по ходу сортировка нужна (если сам такую функцию пишешь конечно
молодец ... ) qsort -ом можно воспользоваться 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 1.4.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



написал smile
здоровый гад вышел smile 
я знаю это не идеал smile но я пока что новичок smile жду критику вообщем smile

Код

int cmp (char *str1,char *str2)
{

    int x,o,s1,s2;

    for(x=o=s1=s2=0;str1[x]!='\0' || str2[o]!='\0';x++,o++)
    {

        if(str1[x]==str2[o] && str1[x]!='\0' && str2[o]!='\0');

        else
        {

            int xB=x,oB=o;

            if( str1[x]=='\0')
                x=strlen(str1)-1;

            else if(str2[o]=='\0' )
                o=strlen(str2)-1;

            if(ispunct(str1[x]))
                s1=-1;
            if(ispunct(str2[o]))
                s2=-1;

            if(s1<s2)
                return -1;
            else if(s1>s2)
                return 1;

            s1=s2=0;

            if(isdigit(str1[x]))
                s1=-1;
            if(isdigit(str2[o]))
                s2=-1;

            if(s1<s2)
                return -1;
            else if(s1>s2)
                return 1;

            s1=s2=0;

            if(isupper(str1[x]))
                s1=-1;
            if(isupper(str2[o]))
                s2=-1;

            if(s1<s2)
                return -1;
            else if(s1>s2)
                return 1;

            if(str1[xB]=='\0' && str2[oB]=='\0')
                return str1[x]-str2[o];

            else if(str1[xB]=='\0')
                return -1;

            else if(str2[oB]=='\0')
                return 1;

        }

    }

    return 0;

}



Это сообщение отредактировал(а) ressac - 1.4.2007, 21:53
PM MAIL   Вверх
apook
Дата 1.4.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



А че она у тя делает вообще  smile 
Что то  smile
ОДнако не правильно переделывай давай нахрен


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 1.4.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



apook, smile)) да я знаю, уже сижу переделываю smile
PM MAIL   Вверх
ressac
Дата 1.4.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



вроде пашет.

Код


#include <stdio.h>

int cmp (char*,char*);

main()
{

    char s1[20]={""}; char s2[20]={""};

    do
    {

        gets(s1);
        gets(s2);
        printf("\n %i",cmp(s1,s2));
        getch();
        system("cls");

    }
    while(1);

    getch();

}

int cmp (char *str1,char *str2)
{

    int x,o,s1,s2;

    for(x=o=s1=s2=0;str1[x]!='\0' || str2[o]!='\0';x++,o++)
    {

        if(str1[x]==str2[o] && str1[x]!='\0' && str2[o]!='\0');

        else
        {

            int xB=x,oB=o;

            if( str1[x]=='\0')
                x=strlen(str1)-1;

            else if(str2[o]=='\0' )
                o=strlen(str2)-1;

            if(ispunct(str1[x]))
                s1=-1;
            if(ispunct(str2[o]))
                s2=-1;

            if(s1<s2)
                return -1;
            else if(s1>s2)
                return 1;

            s1=s2=0;

            if(isdigit(str1[x]))
                s1=-1;
            if(isdigit(str2[o]))
                s2=-1;

            if(s1<s2)
                return -1;
            else if(s1>s2)
                return 1;

            s1=s2=0;

            if(isalpha(str1[x]))
                s1=-1;
            if(isalpha(str2[o]))
                s2=-1;

            if(s1<s2)
                return -1;
            else if(s1>s2)
                return 1;

            if(strlen(str1)!=strlen(str2))
            {

                if(str1[xB]=='\0')
                    return -1;

                else if(str2[oB]=='\0')
                    return 1;

            }
            else
                return str1[x]-str2[o];

        }

    }

    return 0;

}



Это сообщение отредактировал(а) ressac - 2.4.2007, 00:22
PM MAIL   Вверх
ressac
Дата 2.4.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



cага продолжается smile 
 smile 
эта версия стала на много короче и умнее smile
разве что с регистрами проблема, сначала идёт алфавит из больших букв а потом их малых. :(
Код

int cmp (char*s1,char*s2)
{

    int x;

    for(x=0;s1[x]!='\0' || s2[x]!='\0';x++)
        if(!isdigit(s1[x]) && !isdigit(s2[x]))
            break;

    if(s1[x]=='\0' && s2[x]=='\0')
    {
        if(atoi(s1)>atoi(s2))
            return 1;
        else if(atoi(s1)<atoi(s2))
            return -1;
    }

    for(x=0;s1[x]!='\0' && s2[x]!='\0';x++)
        if(s1[x]!=s2[x])
            return s1[x]-s2[x];


    if(s1[x]=='\0' && s2[x]=='\0')
        return 0;

    else if(s1[x]=='\0')
        return -1;

    else if(s2[x]=='\0')
        return 1;

}


Это сообщение отредактировал(а) ressac - 2.4.2007, 20:06
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1158 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.