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

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

Войти
Регистрация
Восстановить пароль
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
#1

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

16.04.2013, 10:51. Просмотров 326. Ответов 3
Метки нет (Все метки)

Допустим есть строка 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2013, 10:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В строке убрать точки из определенного слова (C++):

Считать из файла от определенного символа(слова) до определенного символа(слова) - C++
Считываем текст из файла. Допустим от слова "Qwerty" до слова "Uiop". Примерно догадываюсь как это реализовать FILE *f; char s;...

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

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

В символьной строке вместо каждой точки вставить три точки - C++
В символьной строке типа char, вводимой с клавиатуры вместо каждой найденной точки вставить три точки Желательно использовать только...

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

Ввод строки до определенного слова - C++
Нужно организовать ввод строки, пока не будет введено ключевое слово "stop". После ввода ключевого слова программа выводит строку до него и...

3
stima
495 / 345 / 43
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
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;
  }
1
DiffEreD
1435 / 772 / 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;
}
1
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();
}
0
16.04.2013, 20:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2013, 20:27
Привет! Вот еще темы с ответами:

Чтение определенного поля в строке из файла - C++
Всем привет. Вопрос следующий: Есть файл, в нем строки, нужно его открыть и считать определенную часть строки. Строка в файле...

Вывести слова в строке ДО слова, у которого одинаковые первая и последняя буквы - C++
С клавиатуры вводится строка, надо вывести все слова до слова, у которого одинаковые первая и последняя буквы. Проблема в том, что я не...

Написать функцию, меняющую первую букву каждого слова в строке на номер слова. - C++
Написать функцию, меняющую первую букву каждого слова в строке на номер слова. Продемонстрировать ее использование в программе.

Написать функцию, меняющую первую букву каждого слова в строке на номер слова - C++
Написать функцию, меняющую первую букву каждого слова в строке на номер слова. Продемонстрировать ее использование в программе. ...


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

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

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