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

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

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

Обработка строки - C++

14.11.2009, 11:52. Просмотров 765. Ответов 6
Метки нет (Все метки)

Доброе время суток. Имеется такая задача :
Дана строка, содержащая слова, разделенные одним или несколькими разделительными символами (пробелами, табуляторами), в начале строки и в конце строки также могут находиться разделительные символы. Сформировать новую строку на основе исходной строки, из которой удалены слова, встречающиеся в исходной строке только один раз. Оставшиеся слова разделяются одним пробелом. В начале строки и в конце строки не должно быть разделительных символов.

Данную задачу необходимо сделать в 2-х вариантах :
1) С использованием стандартных функций
2) БЕЗ использования стандартных функций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
15.11.2009, 23:19  [ТС]     Обработка строки #2
вопрос все еще не решен (
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
16.11.2009, 06:13     Обработка строки #3
естественно, ты же не чего не решал...
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
16.11.2009, 22:15  [ТС]     Обработка строки #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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
void DeleteSymbols(char* str)
{
        int i;
        for(i=0;str[i+1]!=0;i++)
        {
                str[i]=str[i+1];
        }
        str[i]=0;
}
int main(int argc, char* argv[])
{
        char strIn[255],strOut[255],strBuf[255],strBuf2[255];
        int k;
        for(;;)
        {
                strOut[0]=0;
                printf("Vvedite stroku\n");
                gets(strIn);
                if(strIn[0] == '0' && strIn[1] == 0) break;
                while(strIn[0]!=0)
                {
                        strBuf[0]=0;
                        for(;strIn[0]==' ' || strIn[0]=='\t'; DeleteSymbols(strIn));
                        strncpy( strBuf,strIn,strcspn(strIn," \t"));
                        strBuf[strcspn(strIn," \t")] = 0;
                        for(;!strspn(strIn," \t") && strIn[0]!=0;)
                                DeleteSymbols(strIn);
                               //ломаю голову как сюда запихнуть проверку на одиночное вхождение строки
                                strcat(strOut," ");
                                strcat(strOut,strBuf);
                       
                }
                printf("StrOut = %s\n",strOut);
        }
        return 0;
}
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
18.11.2009, 22:16  [ТС]     Обработка строки #5
может кто-нибудь подсказать как сюда впихнуть
memcrap ( )
чтобы примерно выполнить проверку, или примерную стандартную фунцию на сравнение строки, ато перепробовав получалось только что оставалась последнее слово.
Думал сначала при проверке каждого слова, запускать цикл и сравнивать в нем слова с этим словом проставляя флаг, и если этот флаг был больше 1 ( то есть вхождение этого слова было не один раз), то записать его в итоговую стоку, но както не получилось это реализовать на коде. Если кто знает примерно более легкий способ отпишите плз.
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
19.11.2009, 21:43  [ТС]     Обработка строки #6
может ктонибудь помочь ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2009, 08:50     Обработка строки
Еще ссылки по теме:

Обработка символьной строки C++
Обработка строки Char C++
обработка строки C++
Обработка строки символов C++
Обработка каждой строки C++

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

Или воспользуйтесь поиском по форуму:
timuragmk
2 / 2 / 0
Регистрация: 19.11.2009
Сообщений: 6
23.11.2009, 08:50     Обработка строки #7
Привет! В Вашем коде я не разбирался, за что прошу прощения. По поводу выборки повторяющихся слов у меня такая идея: формируется <string> вектор, куда закидываются все слова по очереди. Но перед тем как закинуть, проверяем, нет ли уже в векторе этого слова. В случае повторения этого слова в векторе, кидаем это слово во второй - результативный вектор. Но перед этим, проверяем, чтобы он и в результативном не повторился. Вот и всё.
Сам код.
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
#include "stdafx.h"
#include "iostream.h"
#include <string>
#include <vector>
#include <algorithm>
 
bool findStr(char m);
void printR(std::string m);
 
int main(int argc, char* argv[])
{
    std::string s("run michael run ticket star run michael ticket ");
    std::string n;
    std::vector<std::string> v;
    std::vector<std::string> r;
    std::vector<std::string>::iterator vI;
    std::vector<std::string>::iterator rI;
        
    int a = 0; 
    int b = 0;
    
    while(b != -1) {
 
        b = (int)s.find(' ', a);
        n = s.substr(a, b-a);
        a = b+1;
        
        vI = std::find(v.begin(), v.end(), n);
        rI = std::find(r.begin(), r.end(), n);
        
        if ((vI != v.end()) && (rI == r.end())) 
            r.push_back(n);
        else 
            v.push_back(n);
 
    }
    
    std::for_each(r.begin(), r.end(), printR);
 
    return 0;
}
 
bool findStr(char m) { return (m == ' '); }
void printR(std::string m) { cout << m.c_str() << endl; }
Yandex
Объявления
23.11.2009, 08:50     Обработка строки
Ответ Создать тему
Опции темы

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