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

В строке убрать точки из определенного слова - C++

Восстановить пароль Регистрация
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
16.04.2013, 10:51     В строке убрать точки из определенного слова #1
Допустим есть строка char[]="hel.l.o wo.rld an.d all pe.ople" надо убрать из одного из слов (номер его вводит пользователь) точки, допустим убрав из 3его получим "hel.l.o wo.rld and all pe.ople"
Пытался сделать при помощи strtok (сначала все разделить на слова, в нужном слове убрать точки тоже при помощи strtok и сложить с помощью strcat) , но как оказалось strtok почему то изменяет исходный массив, то есть после запуска strtok(text, " ") text становится равен "hel.l.o" и более того, если даже перед strtok приравнять text2=text, то text2 все равно получается "hel.l.o" - потому отбросил эту идею, конечно можно тупо в цикле text[i] найти нужный нам пробел, а потом как только text[i]=='.' сдвигать массив влево, но это по-моему как-то очень примитивно.
Хочу решить эту задачу при помощи строковых функций, но идей нет, так что поделитесь какими-нибудь мыслями как избежать изменений text при strtok и ваши идеи по поводу того как можно реализовать данную программу другим способом.

Добавлено через 37 минут
up.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2013, 10:51     В строке убрать точки из определенного слова
Посмотрите здесь:

C++ Поиск определенного слова
Написать функцию, меняющую первую букву каждого слова в строке на номер слова. C++
Написать функцию, меняющую первую букву каждого слова в строке на номер слова C++
C++ Считать из файла от определенного символа(слова) до определенного символа(слова)
C++ Нужно найти строки, начинающиеся с определенного слова
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
16.04.2013, 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
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
63
64
65
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
 
bool compare(const std::string& dotted, const std::string& not_dotted)
  {
  int dotted_size= dotted.size();
  for (int i = 0, j = 0; i < dotted_size; ++i, ++j)
    {
    if ( dotted[i] == '.')
      ++j;
    
    if (dotted[i] != not_dotted[j])
      return false;
    }
 
  return true;
  }
 
bool find_dotted_word(const std::vector<std::string>& full, const std::string& part)
  {
  std::vector<std::string>::const_iterator it = full.cbegin();
  for ( ; it != full.cend(); ++it)
    {
    if (compare(*it, part))
      return true;
    }
 
  return false;
  }
 
std::vector<std::string> split(const std::string& str)
  {
  std::vector<std::string> ret;
 
  std::string elem;
  std::stringstream ss(str);
  for ( ; ss >> elem; )
    ret.push_back(elem);
 
  return ret;
  }
 
int main()
  {
  std::string str; //what find
  std::string line; //where find
  std::vector<std::string> words; //line splitted by space
  
  std::cout << "Enter full string" << std::endl;
  std::getline(std::cin, line);
  words = split(line);
 
  std::cout << "Enter word" << std::endl;
  std::cin >> str;
 
  std::cout << str;
  find_dotted_word(words, str) ? std::cout << " was finded" : std::cout << " wasn't finded";
  std::cout << std::endl;
 
  std::cin.get();
 
  return 0;
  }
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.04.2013, 13:20     В строке убрать точки из определенного слова #3
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>
#include <vector>
#include <boost/algorithm/string.hpp>
 
int main()
{
    std::string str = "hel.l.o wo.rld an.d all pe.ople";
    std::cout<<str<<"\n";
    std::vector<std::string> words;
    boost::split(words, str, boost::algorithm::is_space());
    std::cout<<"Enter position of word: ";
    int pos;
    std::cin>>pos;
    boost::algorithm::erase_all(words.at(pos-1), ".");
    for (const auto& s : words) std::cout<<s<<" ";
    std::cout<<"\n";
    
    return 0;
}
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
16.04.2013, 20:27  [ТС]     В строке убрать точки из определенного слова #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
#include <iostream>
using namespace std; 
void main ()
{ 
    char text[]="gh.gh.g fh. d.. dfd..d. f323.", *text1, *text2, text6[]="gh.gh.g fh. d.. dfd..d. f323.", pr[]=" ", *txt;
    int i=0, z=3;
    cout<<text<<endl;
    text1=strtok(text, " ");
    if(z!=0)
    {cout<<text1<<pr; 
    while(text1)
    { text1=strtok('\0', " ");
    if(text1 && i<z-1) 
    {cout<<text1<<pr;}
    if(z!=0)i++;
    if(text1 && i==z)
    {text2=strtok(text1, ".");
    if(text2) cout<<text2;
    while(text2) 
    {text2=strtok('\0', "."); 
    if(text2) 
    cout<<text2;
    }}}}
    else {
        text2=strtok(text1, ".");
        cout<<text2;
        while(text1)
        {text2=strtok('\0', ".");
        if(text2==NULL) break;
        if(text2) cout<<text2;
        }}
    i=0;
    if(z==0){text1=strtok(text6, " ");
    cout<<pr;
    while(text1)
    {text1=strtok('\0', " ");
    if(text1) 
    {cout<<text1<<pr;}}}
    else{text1=strtok(text6, " ");
    cout<<pr;
    while(text1)
    {text1=strtok('\0', " ");
    if(text1 && i>z-1) 
    {cout<<text1<<pr;}
     i++;}}
 
cin.get();
}
Yandex
Объявления
16.04.2013, 20:27     В строке убрать точки из определенного слова
Ответ Создать тему
Опции темы

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