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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2009, 21:57   #11
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

ну мне еще учится и учится
а можно вас попросить зайти в тему "помогите с задачкой плиз"
я там написал на 2 странице свое решение а никто не отписался
скажите правильно или нет
pavelstraut вне форума Ответить с цитированием
Старый 26.07.2009, 13:53   #12
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

я вот написал новый алгоритм решающий эту задачу
для английских букв все работает отлично но для русских что-то не то
помогите
Код:
#include <iostream.h>
#include <conio.h>
#include <string.h>
int main()
{
    char s1[80],s2[80];
    int mas[256],i,count=0,ln,ln1=0;
    cin.getline(s1,80);
    ln=strlen(s1);
    for(i=0;i<256;i++) mas[i]=0;
    for(i=0;i<ln;i++)
    {
       mas[s1[i]]= mas[s1[i]]+1;
        if(mas[s1[i]]==1)
        {
          count++;
          s2[count-1]=s1[i];
        }
    }
    s2[count]=0;
    cout<<s2;
    getch();
return 0;
}
pavelstraut вне форума Ответить с цитированием
Старый 26.07.2009, 16:21   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Русские символы отображаются в другой кодировке. Поэтому после ввода строки нужно перевести ее в кодировку 866.

Код:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
int main()
{
    char s1[80],s2[80],buf[80];
    int mas[256],i,count=0,ln,ln1=0,k;
    cin.getline(buf,80);
    CharToOem(buf,s1);
    ln=strlen(s1);
    for(i=0;i<256;i++) mas[i]=0;
    for(i=0;i<ln;i++)
    {
        k = (int)s1[i];
        k = (k>=0) ? k : 256+k;
        mas[k]= mas[k]+1;
        if(mas[k]==1)
        {
          count++;
          s2[count-1]=s1[i];
        }
    }
    s2[count]=0;
    OemToChar(s2,buf);
    cout<<buf;
    getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.07.2009, 16:27   #14
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

некоторые символы неправильно отобпажаются
для примера строка -"эта строка содержит повторы"
pavelstraut вне форума Ответить с цитированием
Старый 26.07.2009, 16:42   #15
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Так пойдет
Код:
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
int main()
{   
	std::locale::global(std::locale("Russian"));
	std::string s = "эта строка содержит повторы";
	std::set<char> n;
	std::copy(s.begin(), s.end(), std::inserter(n, n.begin()));
	std::copy(n.begin(), n.end(), std::ostream_iterator<char>(std::cout," "));
	std::cout << '\n';
	std::cin.get();
	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 26.07.2009, 16:45   #16
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от pavelstraut
некоторые символы неправильно отобпажаются
Да, там меня немного не в ту степь унесло )
Не нужно ничего переводить. Вот

Код:
#include <iostream.h>
#include <conio.h>
#include <string.h>
int main()
{
    char s1[80],s2[80];
    int mas[256],i,count=0,ln,ln1=0,k;
    cin.getline(s1,80);
    ln=strlen(s1);
    for(i=0;i<256;i++) mas[i]=0;
    for(i=0;i<ln;i++)
    {
        k = (int)s1[i];
        k = (k>=0) ? k : 256+k;
        mas[k]= mas[k]+1;
        if(mas[k]==1)
        {
          count++;
          s2[count-1]=(char)k;
        }
    }
    s2[count]=0;
    cout<<s2;
    getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.07.2009, 16:49   #17
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

не понятен вот этот кусок
k = s1[i];
k = (k>=0) ? k : 256+k;
pavelstraut вне форума Ответить с цитированием
Старый 26.07.2009, 16:53   #18
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от pavelstraut
не понятен вот этот кусок
k = s1[i];
k = (k>=0) ? k : 256+k;
Код:
k = (int)s1[i];
k = код символа s1[i]
Код:
k = (k>=0) ? k : 256+k;
Если k>=0, то оставляем как есть (k = k), если же меньше нуля (то есть наткнулись на русский символ), то прибавляем к нему 256.
Это тернарный оператор.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.07.2009, 16:55   #19
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

дак в аски же русские буквы не меньше нуля а больше 128
pavelstraut вне форума Ответить с цитированием
Старый 26.07.2009, 17:02   #20
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от pavelstraut
дак в аски же русские буквы не меньше нуля а больше 128
Да, но смотрим на тип строки:
Код:
char s1[80]
а какой у char'а диапазон значений? Правильно - от -128 до 127. Поэтому при переводе в int будут получаться отрицательные числа.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто поможет оптимизировать прогу, а то я уже оптимизировал как мог :) Droid Помощь студентам 7 12.05.2008 20:56
Находжение разницы годов в SQL запросе Yurk@ БД в Delphi 13 01.03.2008 09:32
как сделать что бы пользователь мог изменять пароль и вводить свой? Илюха Общие вопросы Delphi 13 05.10.2007 14:58
не могу понять... Dutchman Паскаль, Turbo Pascal, PascalABC.NET 4 14.12.2006 07:14