Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Простенькая задачка на строки


Автор: dark0ut 22.2.2004, 02:30
Даны 2 строки S1 и S2. Нужно написать программу, которая удаляет из строки S1 все символы, встретившиеся в строке S2.
Помогите, плиз.

Автор: Гость_setq 22.2.2004, 02:46
чего сложного-то, а? ты начни ТОЛЬКО САМ. мы поможем.

Автор: dark0ut 23.2.2004, 02:30
Ну не знаю. У меня не получается никак, поэтому и спрашиваю.

Автор: kuzia 23.2.2004, 13:09
clrscr();

char s1[]="ass hole mother fucker.";
char s2[]="abcdefgh.";

int i,j,p,n,m;

///////////////////////////////////////////////////////////////

/* String inicialization from keybord */

/*

cout << "Input first string: ";

for(n=0; s1[n]!='.'; n++) //Counting string-length directly while
//Inicializing
{
cin >> s1[n];
}

cout << "Input second string: ";

for(i=0; s2[i]!='.'; i++) //Counting string-length directly while
//Inicializing
{
cin >> s1[i];
}

*/

///////////////////////////////////////////////////////////////

/* Counting in a separate cicle */

for (n=0 ; s1[n] != '.' ; n++ ) //counting simbols to avoid
for (i=0 ; s2[i] != '.' ; i++ ) //errors in printing in BC 3.1

///////////////////////////////////////////////////////////////

for (j=0 ; j <= i ; j++ ) //cicle for the mother - string
{
for(m=0;m<=n;m++) //cicle for the child - string
{
if(s2[j]==s1[m]) s1[m]=' ';
}
}

for (p=0 ; s1[p] != '.' ; p++ ) //this version will not avoid ' '
// => not formating modification
{
cout<<s1[p]; //Printing the optimized string
}

///////////////////////////////////////////////////////////////

/* Ouputing the optimised string */

cout<<"\n";

for (p=0 ; s1[p] != '.' ; p++ ) //this version will avoid ' '
// => formating modification
{
if(s1[p]!=' ') cout<<s1[p]; //Printing the optimized string
}

getch();

Автор: kuzia 23.2.2004, 13:12
Там всё форматирование и вообще всё поехало. Так что скачать этот исходник можно с http://kital.ru/f.cpp

Автор: Coocky 23.2.2004, 23:39
Цитата
for(n=0; s1[n]!='.'; n++) //Counting string-length directly while
//Inicializing
{
cin >> s1[n];
}

cout << "Input second string: ";

А че так сложно -цикл
можно просто
Цитата
char s1[100];
cin>>s1;

Или я че то задание не понялconfused.gif
Да и еще dark0ut почитай про класс CString,там много интересных фунций

Автор: ElectricalStorm 24.2.2004, 00:10
не знаю С++
Алгоритм:
1) Разбиваем строки на массивы символов (получаем массив А и В)
2) Сортируем оба по возрастанию
Код

Пока (есть елементы в первом и во втором) {
   если (первый елемент A == первый елемент B) {
       добавляем в конец :) в массив U   первый елемент A;
       удаляем первый елемент у А
       удаляем первый елемент у В
   }
   иначе если (первый елемент A > первый елемент B) {
       удаляем первый елемент у В
   }
   иначе {
        удаляем первый елемент у А
   }
}


на Perl 10 строчек smile.gif

Автор: kuzia 24.2.2004, 01:55
Coocky - это цикл потому, что я сделал универсальную, чтоб под BORLAND 3.1 пахало, если делать так как ты, то если рамер будет не сто, а меньше, то он оставшиеся байты аски код распечатает просто... одним словом мухолапки!

Автор: Coocky 24.2.2004, 16:38
kuziaНеужели ты не знаешь,что в С++ есть символ оконания строки(/'0'),поэтому будет
Код
for(i=0;s1!=NULL;i++)
{cout<<s1[i];}
а еще:
х=strlen(не помню точно синтаксис,давно не пользовался :D );//кол-во символов

for(i=0;i<=x;i++)
{cout<<s1[i];}


это минимум,а
вообще cout<<s1;//Выведет символы,пока не встретит '0'

Автор: OlegsDP 25.2.2004, 10:56
Код

BOOL maskFilter (char* dst, char* src, char* mask, unsigned int dstlen)
{
 int i, j;
 for (i = j = 0;; i++) {
   if (!src [i]) {
     dst [j] = 0;
     return TRUE;
   }
   BOOL ok = TRUE;
   for (int k = 0; mask [k]; k++) {
     if (src [i] == mask [k]) {
       ok = FALSE;
       break;
     }
   }
   if (ok) {
     dst [j++] = src [i];
     if (j == (dstlen - 1)) {
       dst [j] = 0;
       return FALSE;
     }
   }
 }
}

Автор: Гость_kuzia 1.3.2004, 18:55
блин, итак это и ежу понятно!!!!!! только чем это короче моего!

Автор: Artemon 2.3.2004, 09:16
Гость_kuzia, может и не короче, но у COOCKY правельнее.
Вдруг в конце строки встретится не точка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)