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

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

Войти
Регистрация
Восстановить пароль
 
vasiliy21
26 / 26 / 2
Регистрация: 24.10.2012
Сообщений: 135
#1

Удаление слова после запятой из строки, упростить программу - C++

05.11.2012, 12:46. Просмотров 783. Ответов 14
Метки нет (Все метки)

Я написал программу для удаления одного слова после запятой, но она получилась очень громистка! Как ее можно записать проще, но чтобы так же работала?
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
#include <conio.h>
#include <string.h>
#include <iostream.h>
using namespace std;
 void deletes(char *str, int pos);
int main(){
    char str[200] = {};
    cin.get(str,200);
for (int i = 0; i < strlen(str); i++)
 {  if ((str[i]==' ') && (str[i+1]==' '))
    deletes(str,i+1);
}
    int size = strlen(str);
    for(int i = 0; i < size; i++){
            if(str[i] == ','){
                      for(int j = i+2; j < size; j++){
                              if(str[j] == ' '){
                                        break;
                                        }
                                        str[j] = ' ';
                              }
                      }
            if(str[i] == ',' && str[i]-1 != ' '){
                      for(int j = i+1; j < size; j++){
                              if(str[j] == ' '){
                                        break;
                                        }
                                        str[j] = ' ';
                              }
                      }
    }
for (int i = 0; i < strlen(str); i++)
 {  if ((str[i]==' ') && (str[i+1]==' '))
    deletes(str,i+1);
}
 cout << str;
getch();
return 0;
}
 
 void deletes(char *s, int pos)
{ int i;
if ((s[pos]== ' ') && (s[pos+1]== ' '))
{ deletes(s,pos+1); }
for (i = pos; i < strlen(s)-1; i++)
 {
  s[i]=s[i+1];
}
s[i]=0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 12:46     Удаление слова после запятой из строки, упростить программу
Посмотрите здесь:
Написать программу добавления слова «hello» после первого слова введенной строки C++
C++ Написать программу добавления слова «hello» после первого слова введенной строки
Удаление всех элементов после запятой C++
C++ Удалить из текста все слова, которые расположены после запятой
Добавление слова «salut» после первого слова введенной строки C++
C++ В строке имеется одна точка с запятой (;). Подсчитать количество символов до точки с запятой и после нее.
C++ удаление из строки слова
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2012, 13:11     Удаление слова после запятой из строки, упростить программу #2
Цитата Сообщение от vasiliy21 Посмотреть сообщение
Я написал программу для удаления одного слова после запятой, но она получилась очень громистка! Как ее можно записать проще, но чтобы так же работала?
- попробуй вот этот код
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
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
 
int main()
{
    bool bComa = false;//ÔëГ*ГЈ òîãî Г·ГІГ® áûëî ñëîâî Г± Г§Г*ïÿòîé ïîñëå Г*ГҐГЈГ®
    stringstream ss;//Ñòðêîâûé ïîòîê
    string text;//ГЃГіГґГґГҐГ° äëÿ ââîäèìîãî ГІГҐГЄГ±ГІГ*
    string word;//ГЃГіГґГґГҐГ° äëÿ ñëîâГ* ГЁГ§ ГІГҐГЄГ±ГІГ*
    cout<<"Enter text : ";getline(cin, text);
    if(text.find(',',0) == string::npos)
        cout<<"Input text not contain any coma"<<endl;
    else
    {
        ss.str(text); //Г€Г*èöèГ*ëèçèðóåì ñòðîêîâûé ïîòîê
        text = "";//Ñáðîñèëè ГІГҐГЄГ±ГІ
        while(ss>>word)
        {
            if(bComa)//ÏðîïóñêГ*ГҐГ¬ ñëîâî ïîñëå Г§Г*ïÿòîé
                bComa = false;
            else
            {
                //Èùåì Г§Г*ГЇГїГІГіГѕ ïîñëåâ ГІГҐГЄГіГ№ГҐГЈГ® ñëîâГ*
                bComa = (word.find(',',0) != string::npos);
                text += word;
            }
        }
        cout<<"Updated text : "<<text<<endl;
    }
 
    return 0;
}
Миниатюры
Удаление слова после запятой из строки, упростить программу  
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.11.2012, 13:11     Удаление слова после запятой из строки, упростить программу #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<string.h>
int main()
{
   char s[1024], *t, *w;
   int len;
   fgets(s, 1024, stdin);
   if(t = strchr(s, ','))
   {
      w = strtok(t + 1, " \n\t");
      len = strlen(w);
      *(w + len) = ' ';
      strcpy(w, w + len);
   }
   puts(s);
   return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2012, 13:15     Удаление слова после запятой из строки, упростить программу #4
Тест здесь http://codepad.org/0YWEhXMk
Enter text : test, first word, second word
Updated text : test, word, word

Не по теме:

PS: и да лучше эту строку

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
text += word;
,
записать вот так
text += word + " ";
а то съедаться будутут пробелы между словами

vasiliy21
26 / 26 / 2
Регистрация: 24.10.2012
Сообщений: 135
05.11.2012, 13:18  [ТС]     Удаление слова после запятой из строки, упростить программу #5
И еще .. мне нужно чтобы программа удалила первое слово после нескольких запятых!
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.11.2012, 13:19     Удаление слова после запятой из строки, упростить программу #6
Вот такой вариант
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> 
 
int main() 
{ 
    char str[100]; 
    int i, j; 
    int count = -1;
    std::cout << "Inter a string " << std::endl; 
    std::cin.getline(str, 100); 
    int size = strlen(str);
    for ( i = 0; i < size; i++) 
        if(str[i] ==',') 
        {  
            for ( j = i; str[j]!=' '; j++ ) 
                count++;
            for ( j = i + 1; j < size; j++) 
                str[j] = str[j+count]; 
            size = size - count;
        } 
        
        for ( i = 0; i < size; i++) 
            std::cout << str[i]; 
        std::cout << std::endl;
}
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2012, 13:21     Удаление слова после запятой из строки, упростить программу #7
Цитата Сообщение от vasiliy21 Посмотреть сообщение
И еще .. мне нужно чтобы программа удалила первое слово после нескольких запятых!
вот мой код как раз так и делает

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Enter text : test, first word, second word
Updated text : test, word, word
или что ты подразумеваешь под фразой после нескольких запятых?
vasiliy21
26 / 26 / 2
Регистрация: 24.10.2012
Сообщений: 135
05.11.2012, 13:27  [ТС]     Удаление слова после запятой из строки, упростить программу #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
или что ты подразумеваешь под фразой после нескольких запятых?
Например: jjj jjj,kkk jjj, kkk jjj, kkk jjjjj
И программа должна удалить все kkk
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2012, 13:34     Удаление слова после запятой из строки, упростить программу #9
Цитата Сообщение от vasiliy21 Посмотреть сообщение
Например: jjj jjj,kkk jjj, kkk jjj, kkk jjjjj
И программа должна удалить все kkk
- она так и рабоатет
для такого ввода text = "jjj jjj, kkk jjj, kkk jjj, kkk jjjjj";
т.е я не писал под ввод запятой в середине слова - т.к это является синтаксической ошибкой
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2012, 13:36     Удаление слова после запятой из строки, упростить программу #10
vasiliy21, именно для такого ввода
Цитата Сообщение от vasiliy21 Посмотреть сообщение
Например: jjj jjj,kkk jjj, kkk jjj, kkk jjjjj
И программа должна удалить все kkk
будет работать вот такой код
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 <string>
#include <sstream>
#include <iostream>
using namespace std;
 
int main()
{
    bool bComa = false;//ÔëГ*ГЈ òîãî Г·ГІГ® áûëî ñëîâî Г± Г§Г*ïÿòîé ïîñëå Г*ГҐГЈГ®
    stringstream ss;//Ñòðêîâûé ïîòîê
    string text;//ГЃГіГґГґГҐГ° äëÿ ââîäèìîãî ГІГҐГЄГ±ГІГ*
    string word;//ГЃГіГґГґГҐГ° äëÿ ñëîâГ* ГЁГ§ ГІГҐГЄГ±ГІГ*
    cout<<"Enter text : ";
    //getline(cin, text);//Îòêëè÷èë ðó÷Г*îé ââîä
    //Ïðîñòî ГўГЎГЁГ« ñòðîêó ГІГҐГЄГ±ГІГ* Г± Г§Г*ïÿòûìè
    text = "jjj jjj,kkk jjj, kkk jjj, kkk jjjjj";
    cout<<text<<endl;
    if(text.find(',',0) == string::npos)
        cout<<"Input text not contain any coma"<<endl;
    else
    {
        ss.str(text); //Г€Г*èöèГ*ëèçèðóåì ñòðîêîâûé ïîòîê
        text = "";//Ñáðîñèëè ГІГҐГЄГ±ГІ
        while(ss>>word)
        {
            if(bComa)//ÏðîïóñêГ*ГҐГ¬ ñëîâî ïîñëå Г§Г*ïÿòîé
                bComa = false;
            else
            {
                //Èùåì Г§Г*ГЇГїГІГіГѕ ïîñëåâ ГІГҐГЄГіГ№ГҐГЈГ® ñëîâГ*
                if(word.find(',',0) != string::npos)
                    bComa = word[word.length() - 1] == ',';
                text += word + " ";
            }
        }
        cout<<"Updated text : "<<text<<endl;
    }
 
    return 0;
}
Миниатюры
Удаление слова после запятой из строки, упростить программу  
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.11.2012, 13:37     Удаление слова после запятой из строки, упростить программу #11
Цитата Сообщение от vasiliy21 Посмотреть сообщение
Например: jjj jjj,kkk jjj, kkk jjj, kkk jjjjj
И программа должна удалить все kkk
Моя программа то же работает, соответствуя этому условию.
-=ЮрА=-
05.11.2012, 13:39
  #12

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(word.find(',',0) != string::npos)
* * * * * * * * * * bComa = word[word.length() - 1] == ',';
Красным доп условие для удаления. В принципе последний код реализует логику ввода

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
text = "jjj jjj, kkk jjj, kkk jjj, kkk jjjjj";
и
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
jjj jjj,kkk jjj, kkk jjj, kkk jjjjj
тобишь запятая может быть внутри слова

vasiliy21
26 / 26 / 2
Регистрация: 24.10.2012
Сообщений: 135
05.11.2012, 13:40  [ТС]     Удаление слова после запятой из строки, упростить программу #13
-=ЮрА=-, Вы можете реализовать этот код, но без stringstream ss; word.find text.find взамен этих команд поставить более понятны?
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.11.2012, 13:44     Удаление слова после запятой из строки, упростить программу #14
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<string.h>
int main()
{
   char s[1024], *t, *w;
   int len;
   fgets(s, 1024, stdin);
   t = s;
   while(t = strchr(t, ','))
   {
      w = strtok(t + 1, " \n\t");
      len = strlen(w);
      *(w + len) = ' ';
      strcpy(w, w + len);
      t++;
   }
   puts(s);
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 13:45     Удаление слова после запятой из строки, упростить программу
Еще ссылки по теме:
удаление слова из строки C++
С++ удаление слова из строки C++
C++ Удаление слова из строки
Удаление слова из строки C++
Удаление слова из строки C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
05.11.2012, 13:45     Удаление слова после запятой из строки, упростить программу
  #15

Не по теме:

Цитата Сообщение от vasiliy21 Посмотреть сообщение
-=ЮрА=-, Вы можете реализовать этот код, но без stringstream ss; word.find text.find взамен этих команд поставить более понятны?
в этом случае, код вырастет и понадобиться время, так что банально не буду заводиться, жаль времени...
А что непонятного скажем в stringstream ss ведь все мы знаем ifstrem так вот stringstream тоже самое но данные беруться не из файла, а из переданной строки
ss.str(text); //Инициализируем строковый поток
а word[word.length() - 1] == ',' всё равно что
C++
1
2
char word[] = "test,";
word[strlen(word) - 1] == ',';
т.е всё предельно ясно и просто...

Yandex
Объявления
05.11.2012, 13:45     Удаление слова после запятой из строки, упростить программу
Ответ Создать тему
Опции темы

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