Задача со строками!

Ответить
qwerty2009
Сообщения: 15
Зарегистрирован: 04 фев 2009, 13:48

Дана строка символов. Подсчитать, сколько различных символов встречаются в ней. Вывести их на экран.

Не могу никак разобраться.... :confused:

Код: Выделить всё

void main()
{ 
  const int n=20;
  setlocale(LC_ALL,"");   // отображение русских букв
  int count;//Длина строки
  char strok[n];
  cout<<"Введите строку"<<endl;
  cin>>strok;
  count=strlen(strok);
  char temp=strok[0];
  int qw=0; //Количество разных символов
  for(int index=0; index<count;index++)
  {
	  if (strok[index]<>temp)
	   {
         qw=qw+1;
		 cout<<strok[index];
	   }
  }
  cout<<endl;
 cout<<"Количество символов = "<<count<<endl;
  _getch();
}
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Код: Выделить всё

  cout<<"Введите строку"<<endl;
  cin>>strok;
  for(int i1=0; i1<strlen(strok)-1;i1++)
  {
     for(int i2=i1+1; i2<strlen(strok);i2++)
     {
       if (strok[i1]== strok[i2]) {
         //тут надо удалить символ strok[i2]
         //не знаю как это на C++
       }
     }
  }
  //терепрь в строке не осталось повторяющихся символов
  //и длина строки - это и есть искоамое значение
qwerty2009
Сообщения: 15
Зарегистрирован: 04 фев 2009, 13:48

Спасибо, сделал вот так:

Код: Выделить всё

void main()
{ 
  const int n=20;
  setlocale(LC_ALL,"");   // отображение русских букв
  char strok[n];
  char temp[n]="";
  int y=0; //Количество не повторяющихся символов
  cout<<"Введите строку"<<endl;
  cin>>strok;
for(int i = 0; i < strlen(strok); i++) //Обходим наш массив
 {
   bool f=false; //нету такого символа
   for(int h=0; h<y; h++) //обходим вспомогательный массив
    {
	  if(strok[i] == temp[h]) f=true; // у нас есть такой
    };
//если нет такого символа то добавляем его.
   if (f==false)
    {
     temp[y]=strok[i];
     y++;
    };
  };

cout<<endl;
cout<<temp<<endl;
cout<<"Количество не повторяющихся символов = "<<y<<endl;
_getch();
}
************
подскажите как теперь сделать тоже самое используя указатели???
************
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Смотри выделенный фрагмент в твоём коде.
qwerty2009 писал(а):

Код: Выделить всё

void main()
{ 
  ...........
//если нет такого символа то добавляем его.
   if (f==false)
    {
     [B]*(temp+y)= *(strok+i);[/B]// остальное аналогично
     y++;
    };
  };
...................
}
Zazeek
Сообщения: 9
Зарегистрирован: 17 фев 2009, 22:31

Доброго времени суток.
Не доходит куда втулить...
В общем начнём с задания
Задание:
В заданной стоке заменить каждую запятую - точкой и пробелом. А каждую точку - запятой.
первая часть сделана =>



Код: Выделить всё

{
String S=Edit1->Text,SS="";
int i=1;
while(i<S.Length())
{if(S[i]==',')SS=SS+". ";
else SS=SS+S[i];
i++;}
Edit2->Text=SS;
}
Это как Вы поняли замена запятой на точку с пробелом
Собственно сам вопрос: каким образом втулить туда вторую часть задачи? Знаю что нужен еще один "if" Но помогите всунуть его.

Заранее благодарен.
qwerty2009
Сообщения: 15
Зарегистрирован: 04 фев 2009, 13:48

решил, спасибо

Код: Выделить всё

void main()
{ 
  setlocale(LC_ALL,"");   // отображение русских букв
  string s1;
  getline(cin, s1);
  cout<<endl<<endl;
  int dl_str;
  dl_str=s1.length(); //Длина строки
  for (int i=0; i<dl_str;i++)
  {   
    for (int j=dl_str-1; j>i ;j--)
	 { 
       if(s1[i]==s1[j])
	   {
	    s1=s1.erase(j,1);
		dl_str=s1.length();
	   }
	 }
  }
  dl_str=s1.length();
  cout<<endl;
  cout<<s1<<endl;
  cout<<"Количество не повторяющихся символов = "<<dl_str<<endl;
_getch();
}
Ответить