Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
27 / 27 / 9
Регистрация: 24.10.2012
Сообщений: 135
1

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

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

Author24 — интернет-сервис помощи студентам
Я написал программу для удаления одного слова после запятой, но она получилась очень громистка! Как ее можно записать проще, но чтобы так же работала?
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;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2012, 12:46
Ответы с готовыми решениями:

Удаление текста из строки после запятой
Добрый вечер, посоветуйте пожалуйста, как написать программу для удаления текста из строки после...

Строка содержит слова, разделенные запятой. После каждой запятой вставить пробел
1.1 В заданной строке слова разделены пробелами (кол-во пробелов произвольное). Вывести текст так,...

Написать программу добавления слова «hello» после первого слова введенной строки
Помогите( сколько искал ничего нету.

Написать программу добавления слова «hello» после первого слова введенной строки
Написать программу добавления слова «hello» после первого слова введенной строки C++

14
Заблокирован
Автор 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;
}
Миниатюры
Удаление слова после запятой из строки, упростить программу  
1
Эксперт С++
4267 / 2241 / 203
Регистрация: 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;
}
1
Заблокирован
Автор 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 + " ";
а то съедаться будутут пробелы между словами

0
27 / 27 / 9
Регистрация: 24.10.2012
Сообщений: 135
05.11.2012, 13:18  [ТС] 5
И еще .. мне нужно чтобы программа удалила первое слово после нескольких запятых!
0
1321 / 983 / 267
Регистрация: 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;
}
1
Заблокирован
Автор FAQ
05.11.2012, 13:21 7
Цитата Сообщение от vasiliy21 Посмотреть сообщение
И еще .. мне нужно чтобы программа удалила первое слово после нескольких запятых!
вот мой код как раз так и делает

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Enter text : test, first word, second word
Updated text : test, word, word
или что ты подразумеваешь под фразой после нескольких запятых?
0
27 / 27 / 9
Регистрация: 24.10.2012
Сообщений: 135
05.11.2012, 13:27  [ТС] 8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
или что ты подразумеваешь под фразой после нескольких запятых?
Например: jjj jjj,kkk jjj, kkk jjj, kkk jjjjj
И программа должна удалить все kkk
0
Заблокирован
Автор 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";
т.е я не писал под ввод запятой в середине слова - т.к это является синтаксической ошибкой
0
Заблокирован
Автор 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;
}
Миниатюры
Удаление слова после запятой из строки, упростить программу  
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
05.11.2012, 13:37 11
Цитата Сообщение от vasiliy21 Посмотреть сообщение
Например: jjj jjj,kkk jjj, kkk jjj, kkk jjjjj
И программа должна удалить все kkk
Моя программа то же работает, соответствуя этому условию.
0
-=ЮрА=-
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
тобишь запятая может быть внутри слова

0
27 / 27 / 9
Регистрация: 24.10.2012
Сообщений: 135
05.11.2012, 13:40  [ТС] 13
-=ЮрА=-, Вы можете реализовать этот код, но без stringstream ss; word.find text.find взамен этих команд поставить более понятны?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 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;
}
1
-=ЮрА=-
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] == ',';
т.е всё предельно ясно и просто...

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2012, 13:45

Метод Гаусса. Не выводятся числа после запятой, хотя должны (и если кому-то не сложно, как упростить код?)
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { double x, ...

Удаление всех элементов после запятой
Написать программу, которая бы удаляла все элементы после запятой! Я вот написал программу, но...

Сохранить количество знаков после запятой после конвертации из строки в double
Всем привет. У меня такой вопрос, может даже глупый немного. У меня в ячейке datagridview значение...

Поиск по тексту, использование слова после запятой
У меня есть текст в каждой строке там: 1, котенок пушистый, перс, 4 лапы, усы, ест вискас 2,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru