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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение строк, Сравнение символов-цифр в строке 
:(
    Опции темы
maxlav
Дата 23.6.2009, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!

Имеется задачка: для двух заданных строк символов вывести без повторений набор символов-цифр, не вошедших в обе последовательности, т.е. строка состоит из букв и цифр, необходимо вывести только цифры, которые имеются в одной строке, и отсутствуют в другой.

Подскажите пути решения в рамках общего (не углубленного) курса изучения языка C.


PM MAIL   Вверх
azesmcar
Дата 23.6.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Пройтись по первой строке,
     если текущий элемент - число
          тогда проверить
               есть ли это число в другой строке.

вот алгоритм, решайте
PM   Вверх
maxlav
Дата 24.6.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код
#include <stdio.h>
#include <string.h>
#define L 100
    int main (void){
    char s1[L], s2[L], res[L];
    int a, i, j, flag, len=0;
    puts("string 1:");
    gets(s1);
    puts("string 2:");
    gets(s2);
    for(i=0; i<strlen(s1); i++)
    if(s1[i]>=48 && s1[i]<=57){
        flag=1;
        for(j=0; j<strlen(s2); j++)
        if(s1[i]==s2[j]){
            flag=0; break;
        }
        if (flag==0) continue;
            flag=1;
            for(j=0; j<len; j++)
            if(s1[i]==res[j]){
                flag=0; break;
            }
            if(flag==0) continue;
                res[len++]=s1[i];
    }
    for(j=0; j<strlen(s2); j++)
    if(s2[j]>=48 && s2[j]<=57){
        flag=1;
        for(i=0; i<strlen(s1); i++)
        if(s2[j]==s1[i]){
            flag=0; break;
        }
        if (flag==0) continue;
            flag=1;
            for(i=0; i<len; i++)
            if(s2[j]==res[i]){
                flag=0; break;
            }
            if(flag==0) continue;
                res[len++]=s2[j];
    }
    printf("result string: \n%s\n", res);        
    return 0;
}



Вот что получилось, но выполняется не совсем корректно, что посоветуете?
Компилятор gcc в cygwin.

Это сообщение отредактировал(а) maxlav - 24.6.2009, 12:13
PM MAIL   Вверх
Cheloveck
Дата 24.6.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Код

#include <iostream>
#include <string.h>

int main()
{
    // Получаешь строки как хочешь,
    // для простоты я сам написал.
    char one[] = "d15fddf48fd54";
    char two[] = "dfdf8df78";
    
    int one_count = strlen( one );
    int two_count = strlen( two );
    bool flag = false;
    
    for( int i = 0; i < one_count; i++ )
    {
        if( one[i] < '0' && one[i] > '9' ) // так можно, если знать коды.
            continue;

        for( int j = 0; j < two_count; j++ )
        {
            if( one[i] == two[j] )
            {
                flag = true;
                break;
            }
        }
        if( !flag )
            std::cout << one[i];
        else
            flag = false;
    }
    std::cout << std::endl;
    return 0;
}

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

З.Ы. компилятор g++ из GNU GCC в Linux =))) не ругается и делает всё правильно


--------------------
user posted image
PM Jabber   Вверх
Dov
Дата 25.6.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Код
#define SIZE 10

int main()
{
    int    arr[SIZE] = { 0 };
    char   str1[]    = "787181262";
    char   str2[]    = "374675358"; 
    char * p;

    for( p = str1; *p; p++ )
        if( isdigit( *p ) && !arr[*p - '0'] )
            arr[*p - '0']++;

    for( p = str2; *p; p++ )
        if( isdigit( *p ) && !strchr( p + 1, *p ) )
            arr[*p - '0']++;

    for( int i = 0; i < SIZE; i++ )
        if( arr[i] == 1 )
            printf( "%d", i );

    puts("");
    return 0;
}


Это сообщение отредактировал(а) Dov - 27.6.2009, 23:26


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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