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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pavel17
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 43
#1

строки - C++

13.09.2011, 15:02. Просмотров 597. Ответов 11
Метки нет (Все метки)

слово "толстый" выделить слово "тол" создать из него слова "стол"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2011, 15:02     строки
Посмотрите здесь:

C++ Элементы, у которых сумма номеров строки и столбца четные оставить без изменения, а остальные разделить на максимальный по модулю элемент строки
C++ Сформировать две строки - первая содержит только числа из исходной строки, а вторая – только слова
Строки. Работа с каждым словом строки. C++
C++ Центрирование - расположение строки s1 посередине строки s2 длины L.
Размещение строки s1 в середине строки s2 C++
C++ Строки в с++. После строки выводятся не понятные символы
Строки. Удалить из строки S1 последнюю подстроку, совпадающую с S2 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 15:34     строки #2
Решение может быть как тривиальным - выделить из строки 3 первых символа и перед ними записать 4-ый или же нужно разбить слово на слоги, и перед первым слогом вставить 1-ую букву из второго слога - этот вариант сложен и предполагает лексический разбор слова. Какой вариант нужен?
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
13.09.2011, 16:14     строки #3
выделением символов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Russian");
        string a("толстый"),b;
    cout << a << endl;
    b=a.substr(0,3);
    cout << b << endl;
    b=a[3]+b;
    cout << b << endl;
    system ("pause");
}
Сыроежка
Заблокирован
13.09.2011, 18:47     строки #4
Цитата Сообщение от Pavel17 Посмотреть сообщение
слово "толстый" выделить слово "тол" создать из него слова "стол"
В зависимости от языка программирования, С или С++, эта задача решается по разному. если на С, то надо пользоваться функцией strstr, чтобы найти в ней подстроку "тол", затем с помощью malloc выделить необходимую память и скопировать туда найденную строку. предварительно занеся в первый байт памяти символ 'с'.

Если делать на С++, то надо использовать шаблонный класс std::string и соответствующий метод этого класса find() для поиска подстроки, а затем создать новую строку на основе найденно подстроки и с помощью оператора + добавить в начало символ 'с'/
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
13.09.2011, 18:57     строки #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
using namespace std;
 
void main()
{
        setlocale(LC_ALL, "Russian");
        string a("толстый");
        string b='c'+a.substr(a.find("тол"),strlen("тол"));
    cout << a << endl << b << endl;
        system ("pause");
}
Сыроежка
Заблокирован
13.09.2011, 19:12     строки #6
Цитата Сообщение от softmob Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
using namespace std;
 
void main()
{
        setlocale(LC_ALL, "Russian");
        string a("толстый");
        string b='c'+a.substr(a.find("тол"),strlen("тол"));
    cout << a << endl << b << endl;
        system ("pause");
}
Во-первых, в С++ функция main должна объявляться как

C++
1
int main()
Во-вторых, надо делать проверку на то, что подстрока действительно найдена. То есть нельзя так писать в одну строчку, как это сделали вы

C++
1
string b='c'+a.substr(a.find("тол"),strlen("тол"));
Надо делать проверку на неравенство std::string::npos.
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
13.09.2011, 19:27     строки #7
а зачем int main() если функция нечего не должна возвращать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
 
void main()
{
        setlocale(LC_ALL, "Russian");
        string a("толстый");
    string::size_type loc1 = a.find( "тол", 0 );
        if (loc1!=string::npos)
        {
                string  b='c'+a.substr(loc1,strlen("тол"));
        cout << a << endl << b << endl;
        }
        else
        {
        cout << "Не найдено 'тол'" << endl;
        }       
        system ("pause");
}
Сыроежка
Заблокирован
13.09.2011, 19:29     строки #8
Цитата Сообщение от softmob Посмотреть сообщение
а зачем int main() если функция нечего не должна возвращать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
 
void main()
{
        setlocale(LC_ALL, "Russian");
        string a("толстый");
    string::size_type loc1 = a.find( "тол", 0 );
        if (loc1!=string::npos)
        {
                string  b='c'+a.substr(loc1,strlen("тол"));
        cout << a << endl << b << endl;
        }
        else
        {
        cout << "Не найдено 'тол'" << endl;
        }       
        system ("pause");
}
И void main() исправьте на int main().
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
13.09.2011, 19:31     строки #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
        setlocale(LC_ALL, "Russian");
        string a("толстый");
        string::size_type loc1 = a.find( "тол", 0 );
        if (loc1!=string::npos)
        {
                string  b='c'+a.substr(loc1,strlen("тол"));
        cout << a << endl << b << endl;
        }
        else
        {
        cout << "Не найдено 'тол'" << endl;
        }       
        system ("pause");
        return 0;
}
Сыроежка
Заблокирован
13.09.2011, 19:34     строки #10
Цитата Сообщение от softmob Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
        setlocale(LC_ALL, "Russian");
        string a("толстый");
        string::size_type loc1 = a.find( "тол", 0 );
        if (loc1!=string::npos)
        {
                string  b='c'+a.substr(loc1,strlen("тол"));
        cout << a << endl << b << endl;
        }
        else
        {
        cout << "Не найдено 'тол'" << endl;
        }       
        system ("pause");
        return 0;
}
А вот return 0; можно было не добавлять.

Ставлю вам оценку "хорошо", можете идти домой!
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
13.09.2011, 20:33     строки #11
Цитата Сообщение от Сыроежка Посмотреть сообщение
Во-вторых, надо делать проверку на то, что подстрока действительно найдена. Надо делать проверку на неравенство std::string::npos.
а если без std::string::npos проверять
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
        setlocale(LC_ALL, "Russian");
        string a("толстый");
        int loc1 = a.find("тол");
                if (loc1!=-1)
                {
                string  b='c'+a.substr(loc1,strlen("тол"));
                cout << a << endl << b << endl;
                }
                else
                {
                cout << "Не найдено 'тол'" << endl;
                }               
        system ("pause");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2011, 20:52     строки
Еще ссылки по теме:

C++ Дополнить строки знаками "+", чтобы все строки в нем имели длину 80 символов
Строки (Удаление слова из строки) C++
Как поменять знак элементов матрицы, и как вычесть элементы одной строки из другой строки? C++
C++ String-строки. C-строки. Лексемы
Заменить элемент строки, лежащий на главной диагонали, произведением чётных положительных чисел этой строки C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1920 / 1529 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
13.09.2011, 20:52     строки #12
softmob, всегда подключай все хидеры функции из которых используешь
strlen - <cstring>
setlocale - <clocale>
system - <cstdlib>
Yandex
Объявления
13.09.2011, 20:52     строки
Ответ Создать тему
Опции темы

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