Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Асмик Александровна
Статус: Академик
Рейтинг: 7629
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2648
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2364
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1651
Дата выхода:03.04.2011, 10:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:316 / 185
Вопросов / ответов:1 / 1

Вопрос № 182655: Уважаемые эксперты помогите подрправить 26. удалить в строке все знаки, входящие в заданный набор знаков. в 3х варинантах: 1) строка символов char 2) указательный массив char* 3) использование class string не совсем пон...



Вопрос № 182655:

Уважаемые эксперты помогите подрправить
26. удалить в строке все знаки, входящие в заданный набор знаков.
в 3х варинантах:
1) строка символов char
2) указательный массив char*
3) использование class string
не совсем понял чем отличается 1 и 2 пункты нужна помощь я написал по чару мне сказали что надо полностью через чар, а в 3-м полностью через спринг
я не знаю где неверно всё работает но нужна помощь ..

вот через чар:
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>

#include <locale> // Подключение библиотек

using namespace std;

int i, j, l;
bool t, k;
char r;
char SimBols[128];
char IshStr[128];
char ResStr[128];

int main()
{
setlocale(LC_ALL,"russian_russia"); // Подключение русского языка.

t=true;
while(t==true)
{
co ut << "Символы для удаления: " << endl;
cin >> SimBols;
cout << "Исходная строка: " << endl;
cin >> IshStr;
i = 0;
j = 0;
l = 0;
while(i < strlen(IshStr))
{
while(j < strlen(SimBols))
{

if(IshStr[i] == SimBols[j])
{
k = true;
}
j++;

}
if(k != true)
{
ResStr[l] = IshStr[i];
l++;
}
i++;
k = false;
j=0;
}

cout << "Результат: " << ResStr << endl;
cout << " Хотите попробовать ещё раз? Введите y, если да." << endl;
cin >> r;
if (r==121)
{
system("cls");
t=true;
}
else
{
t=false;
}

}
_getch();
}

вот через спринг:
#inc lude <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>

#include <locale> // Подключение библиотек

using namespace std;

int i;
bool t;
string ResStr, Sim;

int main()
{
setlocale(LC_ALL,"russian_russia"); // Подключение русского языка.
{
cout << "Символы для удаления: " << endl;
getline(cin, Sim);
cout << "Исходная строка: " << endl;
getline(cin, ResStr);
i = 0;
while(i < Sim.length())
{
while(ResStr.find(Sim.at(i)) != string::npos)
{

ResStr.erase(ResStr.find(Sim.at(i)), 1);

}
i++;
}

cout << "Результат: " << ResStr << endl;

cin >> r;

}
_getch();
}

Отправлен: 29.03.2011, 00:25
Вопрос задал: Посетитель - 367730 (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает lamed (Профессор) :
Здравствуйте, Посетитель - 367730! Пример ответа на 1й вопрос. G++/Code::Blocks.
Код:
#include <stdio.h>
/* Б. Керниган, Д. Ритчи. Язык программирования Си */
/* Упражнение 2.4. */
/* Напишите альтернативную версию функции squeeze(s1, s2), */
/* которая бы удаляла из строки s1 все символы, встречающиеся */
/* в строке s2. */
/* 13 сентября 2010, Ковров */

void squeeze(char s1[], const char s2[]);
int main(void)
{
char s1[]="we must study C language";
char s2[]="sam";

printf("s1=%s, s2=%s\n", s1, s2);
squeeze(s1, s2);
printf("s1=%s\n", s1);< br />
return 0;
}

void squeeze(char s1[], const char s2[])
{
int i, j, k;
for (i=0, j=0; s1[i]!='\0'; ++i)
{
for (k=0; s2[k]!='\0' && s1[i]!=s2[k]; ++k)
;
if (s1[i]!=s2[k])
s1[j++]=s1[i];
}
s1[j]='\0';
}

Пример вывода
Код:
s1=we must study C language, s2=sam
s1=we ut tudy C lnguge

Если требуются пояснения, задавайте вопросы в мини-форуме. Удачи!

Ответ отправил: lamed (Профессор)
Ответ отправлен: 29.03.2011, 09:37
Номер ответа: 266440
Россия, Ковров
Тел.: +79107793141

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 266440 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное