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

Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.67
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
01.05.2013, 14:47     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #1
Описать в классе (строки) функции удаления из строки слова с заданным номером и символа с заданным номером. Каждая функция возвращает новую строку. Нужна помощь! (с++)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2013, 14:47     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером)
Посмотрите здесь:

Добавить строку с заданным номером C++
C++ Программа удаляет из строки слово с заданным номером.
C++ Программно пронумеровать в блокноте строки и удалить строку с заданным номером
C++ Написать программу выделения из строки заданного количества слов, начиная со слова с заданным номером.
C++ Определить в строке номера позиции слова с заданным номером
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.05.2013, 19:03     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #2
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
#include <iostream>
#include <string>
 
class String
{
    std::string str_;
    static const char* tokens; 
public:
    String(std::string str): str_(str) {} 
    std::string deleteWord(const size_t& position)
    {
        size_t beginPos = 0, nextPos = 0, wordPos = 0;
        std::string str(str_);
        if (((beginPos = str.find_first_of(tokens)) != 0) && position - 1 == 0)
        {
            str.erase(0, beginPos);
            return str;
        }
        else
            ++wordPos;
        while((beginPos = str.find_first_of(tokens, nextPos)) != std::string::npos)
        {
            if ((nextPos = str.find_first_of(tokens, beginPos + 1)) == std::string::npos)
                nextPos = str.size();
            if ((nextPos - beginPos) > 1)
            {
                if (wordPos == position - 1)
                {
                    str.erase(beginPos + 1, nextPos - (beginPos + 1));
                    return str;
                }
                ++wordPos;
            }
        } 
    }
    std::string deleteCharacter(const size_t position)
    {
        std::string str(str_);
        if (position <= str.size())
            str.erase(position - 1, 1);
        return str;
    }
    friend std::ostream& operator <<(std::ostream&, String);
};
const char* String::tokens = ", .?!:(){}[];"; 
 
std::ostream& operator <<(std::ostream& t, String obj)
{
    return (t << obj.str_);
}
 
int main()
{
    String str = "one, two, (three), [four;five";
    String strWithoutWord = str.deleteWord(4);
    strWithoutWord = strWithoutWord.deleteWord(1);
    std::cout << strWithoutWord << '\n';
    String strWithoutChar = strWithoutWord.deleteCharacter(3);
    std::cout << strWithoutChar << '\n';
    system("pause");
    return 0;
}
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 19:04     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #3
Myptuk,

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
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
 
class String{
    private:
        string str;                     //строка
 
    public:
        String():str("") {}                 //конструктор по умолчанию
        String(string _str):str(_str) {}    //конструктор с параметрами
 
        string get_string(){                //просмотреть содержимое строки
            return str;                     
        }
 
        string del_word(int number){        //метод удаления слова
            int count(0);                   //счетчик слов
            string word;                    //промежуточное слово
            istringstream ii(str);
 
            str.clear();                    //очищаем строку
            while(ii >> word){              //берем по слову
                ++count;                    //увеличиваем счетчик
 
                if(count != number)         //если слово не соответсвует заданному
                    str += (word + ' ');        //записываем в строку
            }
 
            return str;                     //возвращаем строку
        }
 
        string del_symbol(int number){          //метод удаления символа
            str.erase(number, 1);               //алгорим удаления одного символа
            return str;                         //возвращаем строку
        }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    String line("Hello world! I love programming.");
 
    line.del_word(4);
    cout << line.get_string() << endl;
 
    line.del_symbol(3);
    cout << line.get_string() << endl;
 
    cout << "\n\n";
    return 0;
}
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
01.05.2013, 23:10  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #4
спасибо, думаю разберусь теперь

Добавлено через 30 минут
гляньте пожалуйста. что-то ничего не происходит.

Stroka.h :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
 
class Stroka
{
    char *str;
    int n;
public:
    Stroka(void);
    ~Stroka(void);
 
    void Input(void);
    void Print(void);
    Stroka del_word(int number)
    Stroka del_symbol(int number)
    Stroka get_string()
};
Stroka.cpp

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
#include "StdAfx.h"
#include "Stroka.h"
#include "iostream"
using namespace std;
 
Stroka::Stroka(void)
{
    str=0;
    n=0;
    cout<<"stroka sozdana"<<endl;
}
 
Stroka::~Stroka(void)
{
    delete[]str;
    cout<<"stroka udalena"<<endl;
}
void Stroka::Input(void)
{
    cout<<"Vvedi stroky: "<<endl;
    char buf[100];
    cin.getline(buf,100);
    while (buf[n])
    {
        n++;
    }
    str=new char[n+1];
    for (int i=0;i<n;i++)
    {
        str[i]=buf[i];
    }
}
void Stroka::Print(void)
{
    cout<<"Stroka: "<<endl;
    for (int i=0;i<n;i++)
    {
        cout<<str[i]<<endl;;
    }
}
Stroka::del_word(int number)
{       
    int count(0);                   //счетчик слов
    string word;                    //промежуточное слово
    istringstream ii(str);
 
    str.clear();                    //очищаем строку
    while(ii >> word)
    {              //берем по слову
        ++count;                    //увеличиваем счетчик
 
        if(count != number)         //если слово не соответсвует заданному
            str += (word + ' ');        //записываем в строку
    }
 
    return str;                     //возвращаем строку
}
Stroka::del_symbol(int number)
{
    str.erase(number, 1);               //алгорим удаления одного символа
    return str;                         //возвращаем строку
}
Stroka::get_string()
{                
    return str;                     
}
};
само тело class2.cpp :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// class2.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "Stroka.h"
#include "IOstream"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    Stroka s1;
    s1.Input();
    s1.Print();
 
    s1.del_word(1);
    cout << s1.get_string() << endl;
 
    s1.del_symbol(3);
    cout << s1.get_string() << endl;
 
    cout << "\n\n";
    return 0;
}
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 23:23     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #5
Myptuk,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include "string"
 
class Stroka
{
    string str;
    int n;
public:
    Stroka(void);
    ~Stroka(void);
 
    void Input(void);
    void Print(void);
    Stroka del_word(int number);
    Stroka del_symbol(int number);
};
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
#include "StdAfx.h"
#include "Stroka.h"
#include "iostream"
#include "sstream"
#include "string"
using namespace std;
 
Stroka::Stroka(void)
{
    str=0;
    n=0;
    cout<<"stroka sozdana"<<endl;
}
 
Stroka::~Stroka(void)
{
    cout<<"stroka udalena"<<endl;
}
void Stroka::Input(void)
{
    cout<<"Vvedi stroky: "<<endl;
    getline(cin, str, '\n');
}
 
void Stroka::Print(void)
{
    cout << str << endl;
}
 
Stroka::del_word(int number)
{       
    int count(0);                   //счетчик слов
    string word;                    //промежуточное слово
    istringstream ii(str);
 
    str.clear();                    //очищаем строку
    while(ii >> word)
    {              //берем по слову
        ++count;                    //увеличиваем счетчик
 
        if(count != number)         //если слово не соответсвует заданному
            str += (word + ' ');        //записываем в строку
    }
 
    return str;                     //возвращаем строку
}
Stroka::del_symbol(int number)
{
    str.erase(number, 1);               //алгорим удаления одного символа
    return str;                         //возвращаем строку
}
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include "Stroka.h"
#include "IOstream"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    Stroka s1;
    s1.Input();
    s1.Print();
 
    s1.del_word(1);
    cout << s1.Print() << endl;
 
    s1.del_symbol(3);
    cout << s1.Print() << endl;
 
    cout << "\n\n";
    return 0;
}
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
01.05.2013, 23:29  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #6
нифига не выводит
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 23:47     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #7
Myptuk,

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
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
 
class Stroka
{
    string str;
    int n;
 
    public:
        Stroka(void);
        ~Stroka(void);
 
        void Input(void);
        string Print(void);
        string del_word(int number);
        string del_symbol(int number);
};
 
Stroka::Stroka(void)
{
    str = "";
    n = 0;
    cout<<"stroka sozdana"<<endl;
}
 
Stroka::~Stroka(void)
{
    cout<<"stroka udalena"<<endl;
}
 
void Stroka::Input(void)
{
    cout<<"Vvedi stroky: "<<endl;
    getline(cin, str, '\n');
}
 
string Stroka::Print(void)
{
    return str;
}
 
string Stroka::del_word(int number)
{       
    int count(0);                   //счетчик слов
    string word;                    //промежуточное слово
    istringstream ii(str);
 
    str.clear();                    //очищаем строку
    while(ii >> word)
    {              //берем по слову
        ++count;                    //увеличиваем счетчик
 
        if(count != number)         //если слово не соответсвует заданному
            str += (word + ' ');        //записываем в строку
    }
 
    return str;                     //возвращаем строку
}
string Stroka::del_symbol(int number)
{
    str.erase(number, 1);               //алгорим удаления одного символа
    return str;                         //возвращаем строку
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    Stroka s1;
    s1.Input();
    s1.Print();
 
    s1.del_word(1);
    cout << s1.Print() << endl;
 
    s1.del_symbol(3);
    cout << s1.Print() << endl;
 
    cout << "\n\n";
    return 0;
}
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
02.05.2013, 13:43  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #8
Указания к работе:
Разработать класс MyString, реализующий для класса символьной строки несколько конструкторов, деструктор и функции ввода-вывода. Реализовать в этом классе заданные в варианте индивидуального задания функции.
Создание объектов класса, ввод исходных данных, вызов разработанных функций, проверку успешности их выполнения и печать результатов работы выполнять из функции main() программы.
Каждая функция разрабатывается без использования стандартных функций <string.h> (обработка массивов char[] с помощью циклов).
При необходимости создать и вернуть из функции новую строку функция должна иметь возвращаемое значение типа MyString. Память под объект должна выделяться в создающей его функции, освобождаться (явно или неявно) – в main(). В остальных случаях тип возвращаемого значения определяется самостоятельно. Функции типа void не использовать.

Добавлено через 1 минуту
строка должна задаваться массивом char *str, и класс должен быть Stroka.h и Stroka.cpp, в одно всё нельзя слить..
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
02.05.2013, 13:45     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #9
Myptuk, ну так вы же не описали с самого начала задание, я и не знал
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
02.05.2013, 14:49  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #10
ИСХОДНЫЙ КОД:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
 
class Stroka
{
    char *str;
    int n;
public:
    Stroka(void);
    ~Stroka(void);
 
    void Input(void);
    void Print(void);
};
}
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
#include "StdAfx.h"
#include "Stroka.h"
#include "iostream"
using namespace std;
 
Stroka::Stroka(void)
{
    str=0;
    n=0;
    cout<<"stroka sozdana"<<endl;
}
 
Stroka::~Stroka(void)
{
    delete[]str;
    cout<<"stroka udalena"<<endl;
}
void Stroka::Input(void)
{
    cout<<"Vvedi stroky: "<<endl;
    char buf[100];
    cin.getline(buf,100);
    while (buf[n])
    {
        n++;
    }
    str=new char[n+1];
    for (int i=0;i<n;i++)
    {
        str[i]=buf[i];
    }
}
void Stroka::Print(void)
{
    cout<<endl;
    for (int i=0;i<n;i++)
    {
        cout<<str[i];
    }
    cout<<endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// class2-2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "Stroka.h"
#include "IOstream"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    Stroka s1;
    s1.Input();
    s1.Print();
    return 0;
}
Добавлено через 7 минут
yoghurt92, сможешь помочь?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
02.05.2013, 21:18     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #11
Myptuk, щас)

Добавлено через 6 часов 22 минуты
Myptuk,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
 
class Stroka
{
        char *str;
        int n;
 
    public:
        Stroka(void);
        ~Stroka(void);
 
        void Input(void);
        char *Print(void);
        char *del_symbol(int);
        char *del_word(int);
};
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
#include "StdAfx.h"
#include "Stroka.h"
#include "iostream"
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;
 
Stroka::Stroka(void):str(NULL), n(0) {}
 
Stroka::~Stroka(void){ delete[]str; }
 
void Stroka::Input(void)
{
    str = new char[100];
 
    cout << "Введите строку: ";
    cin.getline(str,100);
}
 
char *Stroka::Print(void)
{
    return str;
}
 
char *Stroka::del_symbol(int number)
{
    int size = strlen(str);
    char *_str = new char[size];
    strcpy(_str, str);
    memset(str, 0, 100);
 
    for(unsigned i = 0, k = 0; i < strlen(_str); ++i)
        if(i != number){
            str[k] = _str[i];
            ++k;
        }
 
    return str;
}
 
char *Stroka::del_word(int number)
{
    int size = strlen(str);
    char *s = new char[size];
    int count = 1;
 
    s[0]='\0';
    char *token = strtok (str, "!;:,.?- ");
    while  (token  !=NULL)
    {   
        if (count != number)    { strcat (s,token); strcat (s," "); }
        token = strtok(NULL,"`!;:,.?- ");
        ++count;
    }
 
    strcpy(str,s);
 
    return str;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include "Stroka.h"
#include "IOstream"
#include <Windows.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Stroka s1;
    s1.Input();
    cout << s1.del_symbol(3) << endl;
    cout << s1.del_word(3);
 
    cout << endl;
    return 0;
}
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
04.05.2013, 18:09  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #12
зачем переписал принт (ну всмысле поставил возвращаемое char и указатель)? он же работал нормально.
C++
1
Stroka::Stroka(void):str(NULL), n(0) {}
это не очень понял смысл) было так как меня учили, работало)
и библиотеки
C++
1
2
3
4
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include <Windows.h>
первый раз вижу, не представляю что это, как и сам код функций не разобрал)

C++
1
2
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
и это что такое?))

а так спасибо, жаль не понятно многое

Добавлено через 1 минуту
проще точно никак? я первый курс, этого ничего не знаем еще, а то что знаем - тоже не знаем, препод не очень, а зачет горит)))

Добавлено через 11 минут
и недочет нашел) каждая функция должна работать с исходной строкой.

Добавлено через 5 минут
там смысл должен быть типа разбить строку на подстроки разделенные пробелом, пронумеровать их, удалить нужную подстроку и вернуть в одну строку, а удаление символа должно работать на любой символ, даже на пробел, так что ты всё сделал очень круто, но мне нужно самый простой вариант) С++ для начинающих)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
04.05.2013, 18:10     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #13
Цитата Сообщение от Myptuk Посмотреть сообщение
и это что такое?))
Установка кодовой страницы для консоли в ОС Windows

Цитата Сообщение от Myptuk Посмотреть сообщение
это не очень понял смысл
инициализация str нулем и n нулем

Цитата Сообщение от Myptuk Посмотреть сообщение
зачем переписал принт
Скорее всего чтобы не зависеть от консоли. Хотя это странно при наличии такого метода Input
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
04.05.2013, 18:22  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #14
да это понял уже. библиотеки эти не используем только и функции должны работать каждый раз с исходной строкой
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
04.05.2013, 19:46     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #15
Myptuk,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
 
class Stroka
{
    //приватные поля класса
    public:
        char *str;              //наша строка
 
    public:
        Stroka(void);           //конструктор по умолчанию
        ~Stroka(void);          //деструктор
 
        void Input(void);           //метод ввода строки
        char *Print(void);          //метод вывода строки
        char *del_symbol(int);      //метод удаления заданного символа
        char *del_word(int);        //метод удаления заданного слова
};
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
#include "StdAfx.h"
#include "Stroka.h"
#include "iostream"
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
using namespace std;
 
Stroka::Stroka(void)        //конструктор по умолчанию
{
    str = NULL;         //строка пустая
}
 
Stroka::~Stroka(void)       //деструктор
{ 
    delete[]str;            //освобождаем выделенную память
}
 
void Stroka::Input(void)        //метод ввода строки
{
    str = new char[100];        //выделяем память
 
    cout << "Введите строку: ";
        cin.getline(str, 100);      //вводим строку но не более 100 символов
}
 
char *Stroka::Print(void)
{
    return str;
}
 
char *Stroka::del_symbol(int number)        //процедура удаления символа
{
    int size = strlen(str);                 //размер строки
    char *_str = new char[size];            //выделяем память
 
    for(unsigned i = 0, k = 0; i < strlen(_str); ++i)
        //копируем в новую строку все символы кроме указанного
        if(i != number){
             _str[k] = str[i];
            ++k;
        }
 
    return _str;                        //возвращаем новую строку
}
 
char *Stroka::del_word(int number)      //процедура удаления слова
{
    int size = strlen(str);             //размер строки
    char *_str = new char[size];            //выделяем память
    int count = 1;                      //счетчик слов
 
    char *token = strtok (str, "!;:,.?- ");     //возможные разделители слов
 
    _str[0] = '\0';
    while(token != NULL)
    {   
        if(count != number)         //копируем в новую строку все слова
        {                           //кроме указанного
            strcat(_str, token); 
            strcat(_str, " "); 
        }
 
        token = strtok(NULL,"`!;:,.?- ");
        ++count;
    }
 
    return _str;                    //возвращаем новую строку
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include "Stroka.h"
#include "IOstream"
#include <Windows.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    //для отображения кириллицы в консоли
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Stroka s1;          //создаем объект класса
    s1.Input();         //вводим строку
 
    cout << s1.del_symbol(3) << endl;       //удаляем 3 символ в строке
    cout << s1.del_word(3) << endl;         //удаляем 3 слово в строке
    cout << s1.Print() << endl;             //выводим исходную строку
 
    cout << endl;
    return 0;
}
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
05.05.2013, 14:23  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #16
здорово!!! благодарю! только почему если я меняю местами операции, то есть сначало слово, потом символ, то символ работает не правильно...помоему косяк где-то
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.05.2013, 15:11     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #17
Myptuk, да, тупонул, strtok изменяет исходную строку, сделай так

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
char *Stroka::del_word(int number)      //процедура удаления слова
{
    int size = strlen(str);             //размер строки
    char *_str = new char[size];            //выделяем память
    char *_str_s = new char[size];            //выделяем память
    int count = 1;                      //счетчик слов
 
    strcpy(_str_s, str);
    char *token = strtok (_str_s, "!;:,.?- ");     //возможные разделители слов
 
    _str[0] = '\0';
    while(token != NULL)
    {   
        if(count != number)         //копируем в новую строку все слова
        {                           //кроме указанного
            strcat(_str, token); 
            strcat(_str, " "); 
        }
 
        token = strtok(NULL,"`!;:,.?- ");
        ++count;
    }
 
    return _str;                    //возвращаем новую строку
}
и все будет прекрасно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2013, 15:41     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером)
Еще ссылки по теме:

Написать программу удаления из строки слова с заданным номером. C++
C++ Ошибка при взятии символа под номером Х из строки
Прочитать из файла строку с заданным номером C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Myptuk
1 / 1 / 0
Регистрация: 01.05.2013
Сообщений: 43
05.05.2013, 15:41  [ТС]     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером) #18
спасибо, и за помощь и за терпение) с праздником кстати)
Yandex
Объявления
05.05.2013, 15:41     Класс строки (удаление из строки слова с заданным номером и символа с заданным номером)
Ответ Создать тему
Опции темы

Текущее время: 10:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru