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

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

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

строки - C++

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

слово "толстый" выделить слово "тол" создать из него слова "стол"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2011, 15:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос строки (C++):

Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки - C++
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки. 1. Я дуб дубом,даже...

Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк - C++
Есть динамический массив строк. Заполняется, т.е. размер его уже известен будет. Но дальше нужно сделать задание: "Добавить строки, начиная...

Удалить строки динамической матрицы, начиная со строки К1 и до строки К2 - C++
Сформировать динамический двумерный массив, заполнить его случайными числами и удалить строки, начиная со строки К1 и до строки К2 вот...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней - C++
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка...

Чтение через fscanf_s части строки с пробелом (и запись этой же строки) - C++
нужно записать в файл строку, содержащую через табуляцию int, char, char, char, float, int. Далее необходимо из такой же строки вывести...

Как считать строки из файла, если там больше одной строки? - C++
Как считать строки из файла в массив. Если в файле одна строка, то нет проблем, но если несколько, то при использовании функции fgets ...

11
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 15:34 #2
Решение может быть как тривиальным - выделить из строки 3 первых символа и перед ними записать 4-ый или же нужно разбить слово на слоги, и перед первым слогом вставить 1-ую букву из второго слога - этот вариант сложен и предполагает лексический разбор слова. Какой вариант нужен?
0
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");
}
0
Сыроежка
Заблокирован
13.09.2011, 18:47 #4
Цитата Сообщение от Pavel17 Посмотреть сообщение
слово "толстый" выделить слово "тол" создать из него слова "стол"
В зависимости от языка программирования, С или С++, эта задача решается по разному. если на С, то надо пользоваться функцией strstr, чтобы найти в ней подстроку "тол", затем с помощью malloc выделить необходимую память и скопировать туда найденную строку. предварительно занеся в первый байт памяти символ 'с'.

Если делать на С++, то надо использовать шаблонный класс std::string и соответствующий метод этого класса find() для поиска подстроки, а затем создать новую строку на основе найденно подстроки и с помощью оператора + добавить в начало символ 'с'/
0
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");
}
0
Сыроежка
Заблокирован
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.
1
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");
}
0
Сыроежка
Заблокирован
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().
0
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;
}
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; можно было не добавлять.

Ставлю вам оценку "хорошо", можете идти домой!
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");
}
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
13.09.2011, 20:52 #12
softmob, всегда подключай все хидеры функции из которых используешь
strlen - <cstring>
setlocale - <clocale>
system - <cstdlib>
1
13.09.2011, 20:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2011, 20:52
Привет! Вот еще темы с ответами:

Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A - C++
&quot;Даны строки A и B. Если в A есть латинские буквы, а в B нет повторяющихся символов, то упорядочить символы B в алфавитном порядке и...

Прибавить ко всем элементам каждой строки максимальное значение этой строки - C++
добрый вечер! Помогите пожалуйста доработать код! Изменить текущий массив, прибавив ко всем элементам каждой строки максимальное...

Вычислить длину введенной строки и вывести символы строки с четными индексами - C++
Напишите программу, которая требует ввода строки с клавиатуры. Программа вычисляет длину строки и выводит на экран только те символы...

Как первые два символа строки переставить в конец этой строки? - C++
Собственно вопрос


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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