Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Написать функцию, которая удаляет из строки s1 все символы, встречающиеся в строке s2 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отредактировать текст так, чтобы между словами был ровно один пробел http://www.cyberforum.ru/cpp-beginners/thread119237.html
:wall:Люди, плз помогите с задачами : № 1. Даны две символьные строки, состоящие только из цифр (длина каждой - более 10 символов). Считая, что в этих строках находятся очень длинные целые числа,...
C++ СЛАУ методом Гаусса (ведущий элемент отыскивается среди строк и столбцов) Привет, всем! Помогите пожалуйста. Вот собственно, задача: Разрабоать программу для численного решения СЛАУ методом Гаусса, где ведущий элемент отыскивается СРЕДИ (в теме опечатка) строк и... http://www.cyberforum.ru/cpp-beginners/thread119232.html
C++ Вычисление функции
Задача1.Линейные вычислительные процессы. Задание. Разработать алгоритм и составить по нему программу для вычисления значений функции z = f(x,y). Область определения функции не учитывать.(рис 1) ...
C++ ошибка
Вот программа::: #include <iostream> using namespace std; void check() { int kol_vo_per; cout << "Enter Kolvo chisel v posl " << endl; cin >> kol_vo_per; int...
C++ создать файл http://www.cyberforum.ru/cpp-beginners/thread119170.html
Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа Вывести на печать информацию о самом дешевом издании....
C++ Строка - количество слов с определенной буквой Всем привет! Имеется такая задачка: Дана строка, состоящая из 8 слов, разделенных 1 пробелом. Определить кол-во слов, в которых буква "а" встречается 3 раза. Я так понимаю, что нужно считать 1... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
20.04.2010, 10:34
Цитата Сообщение от PointsEqual Посмотреть сообщение
щас easybudda с STL сделает)
Да тут и без STL не много писанины...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
 
/* Написать и протестировать функцию DELETE(s1, s2), которая удаляет из строки s1 все символы, встречающиеся в строке s2. */
 
char *DELETE(char *s1, const char *s2){
    char *p;
    while ( p = strpbrk(s1, s2) )
        memmove(p, p + 1, strlen(p));
    return s1;
}
 
int main(void){
    char s1[BUFSIZ], s2[BUFSIZ];
    
    printf("String: ");
    if ( !fgets(s1, BUFSIZ, stdin) )
        return 1;
    printf("Characters to remove: ");
    if ( !fgets(s2, BUFSIZ, stdin) )
        return 1;
    
    DELETE(s1, s2);
    printf("Result: %s\n", s1);
    
    return 0;
}
Добавлено через 1 час 13 минут
корявенько как-то получилось, но работает...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdio.h>
#include <string.h>
 
/*
*   Написать и протестировать функцию ESCAPE(str1, str2), которая при копировании текста из str1 в str2 
*   преобразует литеры "новая строка" и "табуляция" в видимые последовательности литер \n и \t. 
*   Сделать также функцию, выполняющую обратное преобразование.
*/
 
char *ESCAPE(char *s1, size_t len, const char *s2){
    char *p;
    for ( p = s1; *s2; ++s2 ){
        switch ( *s2 ){
            case '\n' :
                if ( (len -= 2) > 0 ){
                    *p++ = '\\';
                    *p++ = 'n';
                }
                else {
                    *p = '\0';
                    return s1;
                }
                break;
            case '\t' :
                if ( (len -= 2) > 0 ){
                    *p++ = '\\';
                    *p++ = 't';
                }
                else {
                    *p = '\0';
                    return s1;
                }
                break;
            default :
                if ( --len > 0 ){
                    *p++ = *s2;
                }
                else {
                    *p = '\0';
                    return s1;
                }
                break;
        }
    }
    *p = '\0';
    return s1;
}
 
/* s1 должна быть не меньше s2 */
char *UNESCAPE(char *s1, const char *s2){
    char *p;
    for ( p = s1; *s2; ++s2 ){
        if ( *s2 == '\\' ){
            switch ( *(s2 + 1) ){
                case 'n' :
                    *p++ = '\n';
                    ++s2;
                    break;
                case 't' :
                    *p++ = '\t';
                    ++s2;
                    break;
                default :
                    *p++ = '\\';
                    break;
            }
        }
        else{
            *p++ = *s2;
        }
    }
    *p = '\0';
    return s1;
}
 
 
int main(void){
    char s1[BUFSIZ], s2[BUFSIZ];
    strcpy(s1, "aaa\tbbb\nccc\tddd\n");
    printf("Origin: %s\n", s1);
    printf("Escaped: %s\n", ESCAPE(s2, BUFSIZ, s1));
    printf("Unescaped: %s\n", UNESCAPE(s1, s2));
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru