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

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

Войти
Регистрация
Восстановить пароль
 
OLLEGATOR
Linux-оид
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
#1

Заменить сочетание слов в строке - C++

04.09.2011, 01:36. Просмотров 997. Ответов 9
Метки нет (Все метки)

Есть строчка : GRUB CMDLINE LINUX DEFAULT
Нужно получить : GRUB FINAL LINUX DEFAULT
Тобишь поменять слова...подскажите пожалуйста...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2011, 01:36     Заменить сочетание слов в строке
Посмотрите здесь:

Нужно определить количество слов в строке. Заменить в ней все пробелы на табуляции C++
Узнать, содержится ли в строке, введенной пользователем сочетание букв «ао» C++
Необходимо заменить буквы в строке слов(turbo c++) C++
C++ Посчитать сколько слов в строке начинается с буквы "т" 2. Ввести фразу. Все последовательности одинаковых символов заменить на выражение N(C)
C++ Строка: Определить наличие слов в заданном тексте, содержащих сочетание символов, задаваемое с клавиатуры.
C++ Определить, сколько раз заданное сочетание символов встречается в строке
C++ Заменить сочетание букв в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.09.2011, 02:22     Заменить сочетание слов в строке #2
Разбиваешь строку на отдельные слова.
Создаешь новую строку.
Если отделяемое слово не совпадает с искомым, добавляешь его в новую строку,
иначе, добавляешь искомое слово.
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,494
04.09.2011, 05:49     Заменить сочетание слов в строке #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <stdio.h>
#include <string.h>
 
#define FIND "CMDLINE"
#define REPLACE "FINAL"
 
int main(void){
    const char inStr[] = "GRUB CMDLINE LINUX DEFAULT";
    char outStr[BUFSIZ] = { 0 };
    char * pFind;
 
    if ( ! ( pFind = strstr(inStr, FIND) ) ){
        fprintf(stderr, "Wrong input string!\n");
        return 1;
    }
 
    strncpy(outStr, inStr, pFind - inStr);
    outStr[pFind - inStr] = '\0';
    strcat(outStr, REPLACE);
    strcat(outStr, pFind + strlen(FIND));
 
    printf("Input:  %s\nOutput: %s\n", inStr, outStr);
 
    return 0;
}
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.09.2011, 12:17     Заменить сочетание слов в строке #4
easybudda, а если вхождений искомого слова будет несколько?
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.09.2011, 12:34     Заменить сочетание слов в строке #5
Так как-то.
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
#include <iostream>
#include <sstream>
#include <algorithm>
 
std::string str_replace( std::string&, const std::string&, const std::string&);
 
int main()
{
    std::string a = "GRUB CMDLINE LINUX DEFAULT";
    std::string b = "CMDLINE";
    std::string c = "FINAL";
    std::cout << str_replace(a, b, c);
}
 
std::string str_replace( std::string& a, const std::string& b, const std::string& c )
{
    std::string::iterator it = a.begin();
    while ( (it = std::search( it, a.end(), b.begin(), b.end()) ) != a.end() )
    {   
        for (int i = 0; i < (int) b.size(); ++i)
            it = a.erase(it);
        
        for (int i = 0; i < (int) c.size(); ++i, ++it)
            it = a.insert(it, c[i]);
    }
    
    return a;
}
-=ЮрА=-
Заблокирован
Автор FAQ
04.09.2011, 12:50     Заменить сочетание слов в строке #6
Предлагаю заюзать методы CString

C++
1
2
CString s = "GRUB CMDLINE LINUX DEFAULT";
s.Replace("CMDLINE","FINAL");
Подробней о Replace здесь
http://msdn.microsoft.com/en-us/libr...(v=vs.60).aspx
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
04.09.2011, 13:00     Заменить сочетание слов в строке #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Без учета регистра:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <boost/algorithm/string/replace.hpp>
 
int main(){
  std::string s("GRUB CMDLINE LINUX DEFAULT"), w1("CMDLINE"), w2("FINAL");
  boost::algorithm::ireplace_all(s, w1, w2);
  std::cout << s;
  return 0;
}
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
04.09.2011, 17:26     Заменить сочетание слов в строке #8
Вот написал функция по-замене только слов подстроки не будут изменяться.
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
#include <string.h>
#include <stdio.h>
#include <ctype.h>
 
char* str_replace(char* str, const char* sub, const char* snew) {  
   char* tmp = str;
   int   len1  = strlen(sub);
   int   len2  = strlen(snew);
   int   pos;
   char* ptr;
 
   while((ptr = strstr(str, sub)) != NULL) {
               pos = strlen(str) - strlen(ptr);
               if(pos > 0 || *((str) + pos + len1)) {
                     if(isalpha( *((str) + pos - 1) ) || isalpha( *((str) + pos + len1))) {
                            str += pos + 1;
                            continue;
                     }
               }
                if(len1 > len2)
                        memmove(str + pos, str + (pos + len1 - len2), strlen(str) - pos);
       else 
                        memmove(str + pos, str + (pos + len1 - len2), strlen(str) - pos + (len2 - len1));
       
                strncpy(str + pos, snew, strlen(snew));
                str += pos + 1;
   }
   return tmp;
}
 
 
int  main(void) {
 
    char str[128] = "system [sys] system sys.3, the sys ?";
    puts( str_replace(str, "sys","MS-DOS") );
 
    strset(str, '\0');
    strcpy(str, "ASP, ASP.NET, ASPIRANT, ASP");
    puts( str_replace(str, "ASP", "www.sample.ru"));
 
    strset(str, '\0');
    strcpy(str, "token, tokenize, atoken, |token|-token. tokens.");
    str_replace(str, "token", "*");
    puts(str);
 
    getchar();
    return 0;
}
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,494
04.09.2011, 17:49     Заменить сочетание слов в строке #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от kazak Посмотреть сообщение
а если вхождений искомого слова будет несколько?
Хороший вопрос!
Если не заморачиваться проверкой переполнения и оптимизацией, то как-то так
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
#include <stdio.h>
#include <string.h>
 
#define FIND "AAA"
#define REPLACE "BBBB"
 
char * strreplace(char * str, const char * from, const char * to){
    char buf[BUFSIZ] = { 0 };
    char * pBuf, * pStr, * pFind;
    
    pBuf = buf;
    pStr = str;
    
    while ( pFind = strstr(pStr, from) ){
        strncpy(pBuf, pStr, pFind - pStr);
        pBuf[pFind - pStr] = '\0';
        strcat(pBuf, to);
        strcat(pBuf, pFind + strlen(from));
        pStr = pFind + strlen(from);
        if ( pFind = strstr(pBuf + 1, pStr) )
            pBuf = pFind;
    }
    
    return ( pBuf == buf ) ? str : strcpy(str, buf);
}
    
 
int main(void){
        char buf[BUFSIZ];
 
        while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 )
            printf("Result: %s\n", strreplace(buf, FIND, REPLACE));
 
        return 0;
}
Вроде бы работает...

Добавлено через 6 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Предлагаю заюзать методы CString
А если нет CString - написать его сначала?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2011, 17:55     Заменить сочетание слов в строке
Еще ссылки по теме:

C++ Найти число пробелов в строке и заменить их на номер по порядку в исходной строке
C++ Заменить в строке все первые буквы слов на соответствующие заглавные
Замена букв в строке на сочетание букв C++
C++ Если минимальный элемент матрицы стоит в первой строке, то элементы, стоящие в строке за ним, заменить нулями
Вывести список слов в заданном тексте, содержащих сочетание символов C++

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

Или воспользуйтесь поиском по форуму:
Nameless One
04.09.2011, 17:55     Заменить сочетание слов в строке
  #10

Не по теме:

Все уже давно написано за нас
Код
[nameless@desktop samples]$ sed -i.back 's/CMDLINE/FINAL/' test.txt

Yandex
Объявления
04.09.2011, 17:55     Заменить сочетание слов в строке
Ответ Создать тему
Опции темы

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