Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2013, 12:47   #1
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
Печаль Вывести диапозон символов из массива Cи

Доброе время суток всем! Прошу объяснить мне задачу на си, надо вывести из готового массива символов символы от а до п, и от р до я. Я сделал, вроде работает, но почему то работает наоборот. Объясните пожалуйста. вот часть кода.
Код:
 char *p="а";
    char *p1="п";
    for(i=0; i<strlen(s1); i++)
    {
        if(s1[i]>=*p && s1[i]<=*p1) // в s1 находиться заданный массив символов
        {
            putchar(s1[i]); // здесь должны выводиться символы от а до п, а получается наоборот
        }
        else
        {
           putchar(s1[i]);// здесь должны выводиться символы от р до я, а получается наоборот
        }
 
    }

Последний раз редактировалось DimaNIKul; 05.05.2013 в 13:37.
DimaNIKul вне форума Ответить с цитированием
Старый 05.05.2013, 12:55   #2
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Попробуйте добавить в начало
Код:
setlocale (0, "");
и все-таки
Код:
 char p = 'а';
 char p1 =' п';
...
 if(s1[i]>=p && s1[i]<=p1)
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 05.05.2013, 13:13   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Как Вы определяете, что вывод происходит наоборот?)
Ваш if вырождается в:
Код:
for(i=0; i<strlen(s1); i++)
    putchar(s1[i]);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.05.2013, 13:52   #4
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию

alexander13, я попробывал так, не получается все равно
Цитата:
Сообщение от BDA Посмотреть сообщение
Как Вы определяете, что вывод происходит наоборот?)
Ваш if вырождается в:
Код:
for(i=0; i<strlen(s1); i++)
    putchar(s1[i]);
Я буду кэпом, но я делаю сборку и тестю и вижу что он мне выводит наоборот. А почему мой if вырождается в это?
DimaNIKul вне форума Ответить с цитированием
Старый 05.05.2013, 15:38   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Цитата:
А почему мой if вырождается в это?
В Вашем if по обеим веткам одинаковый код.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.05.2013, 22:09   #6
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию

Я понял вас, я сделал так, создаю 2 массива, и записываю два диапозона, но все равно получается наоборот, не пойму почему
Код:
for(i=0; i<strlen(s1); i++)
    {
        if(s1[i]>p && s1[i]<p1)
        {
            b[i1]=s1[i];// В этом массиве должны быть буквы от а до п
                           // а на самом деле от р до я
            i1++;
        }
        else
        {
            c[i2]=s1[i];// В этом массиве должны быть буквы от р до я
                           // а на самом деле от а до п
            i2++;
        }

    }
DimaNIKul вне форума Ответить с цитированием
Старый 06.05.2013, 00:54   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Попробуйте скомпилировать это:
Код:
#include <stdio.h>
#include <stdlib.h>

int
main()
{
    unsigned char a = 'а';
    unsigned char p = 'п';
    unsigned char a1, p1;
    scanf("%c%c", &a1, &p1);
    printf("%u = %u\n%u = %u\n", a, a1, p, p1);
    return 0;
}
Введите буквы "ап" и нажмите Enter. Если в выводе равенства не будут выполняться, значит Вы сравниваете буквы из разных кодировок.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.05.2013, 09:32   #8
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
По умолчанию

Да равенство не выполняется, я так понимаю лучше сделать так чтобы сравнивались коды символов? или ещё как то?
DimaNIKul вне форума Ответить с цитированием
Старый 06.05.2013, 09:46   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Задайте границы не буквенными константами, а правильными целочисленными значениями (см. таблицу - http://ru.wikipedia.org/wiki/Альтернативная_кодировка).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.05.2013, 14:36   #10
DimaNIKul
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 17
Радость

У меня получилось, надо было использовать тип unsigned char вместо char, и начал сравнивать с кодами символов и все встала на свои места. Всем спасибо!
DimaNIKul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СИ, вывод массива символов ray13 Помощь студентам 7 16.09.2020 07:49
рандом в диапозон ZV1 Помощь студентам 1 17.12.2012 20:07
сортировка массива символов Kukurudza Общие вопросы C/C++ 6 09.08.2011 10:17
диапозон в case (c++) Айат Помощь студентам 4 03.04.2009 15:13
Выделить Диапозон Rom1k06 Microsoft Office Excel 4 01.09.2008 22:18