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

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

Войти
Регистрация
Восстановить пароль
 
prettynetty
2 / 2 / 1
Регистрация: 09.07.2012
Сообщений: 14
#1

Удвоить все найденные вхождения строки в текст - C++

16.07.2012, 11:48. Просмотров 680. Ответов 5
Метки нет (Все метки)

c++ visual
Задание: дан текст и строка. удвойте все найденные вхождения строки.
насколько я понимаю, если ввести текст "мама мыла раму" и строку"мыла", то должно получиться "мама мыламыла раму".
прочитала тут про функцию Pos, пытаюсь ее применить, но компилятор ругается. может эта функция только для билдера? помогите решить задачку хоть как нибудь.
доп.условие: ввод и вывод русского текста

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
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
 
 
int main()
{
    SetConsoleOutputCP(1251);
    char text[256], text2[256], str[64];
    int i, j;
    printf("введите текст:\n");
    fflush(stdin);
    gets(text);
    OemToChar(text, text);
    printf("введите строку:\n");
    fflush(stdin);
    gets(str);
    OemToChar(str, str);
    if(strstr(text, str)!=NULL){
    for(i = 0; i < text.Pos(str); i++)
        text2[i]=text[i];
    for(i = text.Pos(str), j=0; j < strlen(str); i++, j++)
        text2[i]=str[j];
    for(i = text.Pos(str)+strlen(str), j=text.Pos(str); j < strlen(text); i++, j++)
        text2[i]=text[j];
    }
    printf("результат:%s\n", text);
    system("pause");
    return 0;}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2012, 11:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удвоить все найденные вхождения строки в текст (C++):

Найти все вхождения строки P в текст T, используя наивный алгоритм поиска - C++
Только начал изучать язык С++, не могу никак реализовать: даны строки P и T. Найти все вхождения строки P в текст T, используя наивный...

Стек. Выведите все вхождения символов указанного набора в текст в обратном порядке - C++
Дан текст, состоящий из заглавных и строчных английских букв, символов ! ; ? . , - : ; ) ( ' &quot; и пробелов. Выведите все...

Найти все вхождения строки s в t - C++
Требуется написать программу, которая выводить на экран идексы всех вхождений строки s в строку t: abababababa aba 0 2 4 6 8 ...

Найти все вхождения строки Т в строке S - C++
Найти все вхождения строки Т в строке S Помогите пожалуйста! И если можно на языке Си!!!

Удалить все вхождения символов из строки - C++
как удалить вхождение всех точек в строку, стандартными средствами, без цикла написанного вручную. Я сделал так но это не правильно find...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
16.07.2012, 12:13 #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
#include <iostream>
#include<string>
 
using namespace std;
 
int main()
{
    string text,str;
    cout<<"ўўҐ¤ЁвҐ ⥪бв:\n";
    getline(cin,text);
    cout<<"ўўҐ¤ЁвҐ бва®Єг:\n";
    getline(cin,str);
    size_t n=text.find(str);
    if(n!=string::npos)
    {
         text.insert(n,str);
         cout<<"१г«мв*в:%s\n"<<text;
    }
    else
        cout<<"ЌҐв в*Є®© бва®ЄЁ\n";
    system("pause");
    return 0;
}
}
1
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
16.07.2012, 12:18 #3
Что Вы хотите от функции Pos ?
Как я понимаю аналог функции Pos - strstr
0
Catstail
Модератор
22615 / 10976 / 1779
Регистрация: 12.02.2012
Сообщений: 18,114
16.07.2012, 12:21 #4
Вот "детское" (но работающее) решение:

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.h>
#include <string.h>
 
char * DupWord(char *stri, char *word)
{
    int i,j,k,n,l;
    char *curr;
 
    n=strlen(stri);
    l=strlen(word);
    
    char *wd=new char[l+1];
    char *Res=new char[n*2+1];
 
    for (i=0; i<n*2+1; i++) Res[i]=0;
 
    i=0;
    k=0;
    curr=stri;
 
    while(1)
    {
        // áåðåì l ñèìâîëîâ Г± i-Г© ïîçèöèè
        for (j=0; j<l; j++) wd[j]=stri[i+j];
        wd[l]=0;
        // ïðîâåðÿåì, Г*ГҐ Г*Г*øëè ëè ñëîâî?
        if (strcmp(wd,word) == 0)
        {
            // êðîïèðóåì Гў âûõ. ñòðîêó äâГ*æäû
            for (j=0; j<l; j++) Res[k++]=word[j];
            for (j=0; j<l; j++) Res[k++]=word[j];
            i=i+l-1;
        }
        else
        {   // êîïèðóåì îäèГ* ñèìâîë
            Res[k++]=stri[i];
        }
        i++;
        if ((n-i) < l)
        {   // êîïèðóåì îñòГ*òîê äî ГЄГ®Г*Г¶Г* ñòðîêè
            for (j=0; j<n-i; j++) Res[k++]=stri[j];
            Res[k++]=0;
            break;
        }
    }
 
    delete [] wd;
    return Res;
 
}
 
int main(int argc, char* argv[])
{
        char *S="To be or not to be";
        char *R=DupWord(S,"be");
 
        cout << R << endl;
 
        delete [] R;
 
        return 0;
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.07.2012, 14:24 #5
prettynetty, как таковой функции Pos в языке не существует её надо писать. Предагаю на рассмотрение не очень сложный код на Си как раз с самописной функцией Pos
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ ïîçèöèþ 1-ГЈГ® âõîæäåГ*ГЁГї sub Гў str
//Åñëè sub îòñóòñâóåò Гў str âîçâðГ*Г№Г*åìîå Г§Г*Г*Г·ГҐГ*ГЁГҐ -1
int Pos(char * str, char * sub); 
 
//"Г¬Г*Г¬Г* ìûëГ* Г°Г*ìó Г°Г*ìó ìûëГ* Г¬Г*Г¬Г*"
int main()
{
    int pos = -1;//Áóäåò ñîäåðæГ*ГІГј Гў Г±ГҐГЎГҐ ïîçèöèþ ïîäñòðîêè Гў ГІГҐГЄГ±ГІГҐ
    system("chcp 1251");//ðóññèôèêГ*öèÿ
    char text[1024] = {0};//áóäåò ñîäåðæГ*ГІГј Гў Г±ГҐГЎГҐ ââîäèìûé ГІГҐГЄГ±ГІ
    char buf [1024] = {0};//ГЎГіГґГґГҐГ° äëÿ èñõîäГ*îãî ГІГҐГЄГ±ГІГ*
    char str [64]   = {0};
    printf("Enter text (less than 1024 chars) : ");
    scanf("%[^\n]",text);getchar();//Ââîäèì ГІГҐГЄГ±ГІ
    printf("Enter string (less than 64 chars) : ");
    scanf("%[^\n]",str);getchar();//Ââîäèì ñòðîêó
    int sLen = strlen(str);//ÓçГ*Г*ВёГ¬ äëèГ*Г*Гі ïïîäñòðîêè 
    pos = Pos(text, str);//Èùåì ïîäñòðîêó Гў ГІГҐГЄГ±ГІГҐ
    while(-1 < pos)
    {
        //Êîïèðóåì Гў ГЎГіГґГҐГ° Г·Г*Г±ГІГј ñòðîêè ïîñëå str
        strcpy(buf, text + pos + sLen);
        text[pos + sLen] = '\0';//ГЋГІГЎГ°Г*ñûâГ*ГҐГ¬ îñòГ*ГўГёГіГѕГ±Гї Г·Г*Г±ГІГј ГІГҐГЄГ±ГІГ*
        strcat(text, str);//ÄîáГ*âëÿåì ГЄ ñòðîêå str (äóáèëèðóåì ГҐВё)
        strcat(text, buf);//ÄîáГ*âëÿåì ГЄ ñòðîêå îòáðîøåГ*Г*ГіГѕ Г·Г*Г±ГІГј
        //Èùåì ñëåäóþùåå Г§Г* pos âõîæäåГ*ГЁГҐ str Гў ГІГҐГЄГ±ГІ
        pos = pos + 2*sLen;
        if(-1 < Pos(&text[pos], str))
            pos = pos + Pos(&text[pos], str);
        else
            pos = -1;
    }
    printf("Text after doubling : %s\n", text);
    system("pause");
    return 0;
}
 
int Pos(char * str, char * sub)
{
    int pos = -1;
    char * buf = NULL;//ÓêГ*Г§Г*òåëü Г*Г* ñòðîêó
    if(str != NULL && sub != NULL)
    {
        buf = strstr(str,sub);
        if(buf != NULL)
            pos = strlen(str) - strlen(buf);
    }
    return pos;
}
1
Миниатюры
Удвоить все найденные вхождения строки в текст  
prettynetty
2 / 2 / 1
Регистрация: 09.07.2012
Сообщений: 14
16.07.2012, 16:21  [ТС] #6
-=ЮрА=-, спасибо. очень помогли

Добавлено через 44 секунды
defer,
Catstail,
спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2012, 16:21
Привет! Вот еще темы с ответами:

Удалить из строки все вхождения заданного символа - C++
12. Преобразовать заданную строку следующим образом: удалить из строки все вхождения заданного символа; Соль в том что это нужно...

Заменить в строке S1 первые, последнее и все вхождения строки S2 на S3. - C++
Даны три строки: S1, S2, S3. Заменить в строке S1 первые, последнее и все вхождения строки S2 на S3. Вот я написал программу но она...

Заменить в строке S1 первые, последнее и все вхождения строки S2 на S3 - C++
Вот программа к задаче! Вот в чем вопрос, как работает вот это cin.getline(text,1024); и можно ли обойтись без него?...

строки (считать, заменив все вхождения слова «Slovo» на слово «Znak») - C++
Помогите, пожалуйста, как написать программку, которая считывает с клавиатуры строку символов, после чего выводит ее на экран,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.07.2012, 16:21
Ответ Создать тему
Опции темы

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