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

строки - C++

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

Дан безразмерный массив.Вставить количество символов каждой строки вначало этой же строки. C++
C++ Вывести строки файла, после строки добавляя, сколько раз в ней встретилось слово
Строки. Вывести на печать то слово этой строки, которое по алфавиту предшествует всем другим C++
C++ Если строки одинаковы, объединить две строки, исключив из второй первые десять символов
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++ В динамической матрице целых чисел добавить строки после строки, содержащей простое число
C++ Определить, верно ли утверждение: сумма элементов каждой i-й строки матрицы больше суммы (i-1)-й строки
C++ Определить, верно ли утверждение: сумма элементов каждой i-ой строки матрицы больше суммы (i-1)-ой строки

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

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

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