С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
mikykonst
0 / 0 / 1
Регистрация: 29.10.2014
Сообщений: 89
1

Удалить из заданного предложения все слова, где встречаются цифры

02.05.2015, 12:08. Просмотров 517. Ответов 7
Метки нет (Все метки)

Составить и отладить программу, которая удаляет (путем сжатия) из заданного предложения все слова, где встречаются цифры, сохраняя знаки препинания.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2015, 12:08
Ответы с готовыми решениями:

Удалить все цифры из заданного слова и подсчитать количество изъятий
Удалить все цифры из заданного слова и подсчитать количество изъятий. будто...

Напечатать все слова заданного предложения, состоящие из тех же букв, что и первое слово предложения
Напечатать все слова заданного предложения (слова разделены пробелами),...

Исключить все слова предложения, начинающиеся с заданного префикса
Дано предложение. Исключить все слова, начинающиеся с префикса «наи».

Удалить из слова X все буквы, которые встречаются в слове Y
#include <iostream> using namespace std; main() { string x, y; ...

Удалить слова, где есть цифры
Есть файлик, в нем слова разные из латинского алфавита и цифр что-то вроде:...

7
Iridiscent
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
03.05.2015, 16:33 2
напишите список знаков препинания которые нужно сохранять
0
mikykonst
0 / 0 / 1
Регистрация: 29.10.2014
Сообщений: 89
03.05.2015, 18:31  [ТС] 3
Точка, запятая, тире, воск и вопр знаки

Добавлено через 53 секунды
Цитата Сообщение от Iridiscent Посмотреть сообщение
напишите список знаков препинания которые нужно сохранять
Точка, запятая, тире, воск и вопр знаки

Добавлено через 20 минут
Iridiscent, вы поможете
0
Hrollo
35 / 35 / 27
Регистрация: 05.11.2013
Сообщений: 149
03.05.2015, 18:57 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
#include <iostream>
#include <sstream>
#include <string>
#include <cctype>
 
using namespace std;
 
bool addWord(const string &s)
{
    for(size_t i = 0; i < s.size(); i++)
    {
        if(isdigit(s[i]))
        {
            return false;
        }
    }
    return true;
}
 
int main()
{
    string str;
    cout << "Enter string:";
    getline(cin,str);
    istringstream stream(str);
    string result;
    string word;
    while(stream >> word)
    {
        if(addWord(word))
        {
            result += word + " ";
        }
    }
    cout << "Result string:" << result << endl;
    return 0;
}
0
kol
23 / 9 / 5
Регистрация: 30.01.2015
Сообщений: 175
03.05.2015, 19:59 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
29
30
#include <iostream>
using namespace std;
 
inline unsigned first_chapter_number(string str) { return str.find_first_of("0123456789"); }
 
int main()
{
    string str = "privet 1 menia: zovut kol9 ia kras1v!";
    unsigned first_chapter = first_chapter_number(str);
 
    if(first_chapter == string::npos) cout << "String dont have words with chapters";
    else
    {
        while(first_chapter != string::npos)
        {
            unsigned right = str.find_first_of(" !?.,-:",first_chapter);
            unsigned left = str.find_last_of(" !?.,-:", first_chapter);
            if(left == string::npos)
            {
                left = 0;
                right++;
            }
            str.replace(left, right-left, "");
            first_chapter = first_chapter_number(str);
        }
    }
 
    cout << str;
    return 0;
}
0
Iridiscent
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
03.05.2015, 20:36 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
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 <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <conio.h>
#include <ctime>
#include <iomanip>
#include <stdlib.h>
#include <sstream>
#include <cmath>
 
 
using namespace std;
 
int main()
{
char mass[1000];
char cifri[11]="0123456789";
char znaki[7]=",.!?:-";
char zn;
gets(mass);
int len=strlen(mass);
int i,nach=0,konec,d;
bool znak=0,nk=1,cifr=0;
for(i=0;i<=len;i++)
{
len=strlen(mass);
for(int b=0;b<11;b++)if(mass[i]==cifri[b])cifr=1;
 
if(mass[i]==' '||mass[i]=='\0'){
if(nk)
{
konec=i;nk=0;
if(cifr)
{
for(int c=0;c<7;c++)if(mass[i-1]==znaki[c]){zn=mass[i-1];znak=1;};
if(znak){mass[nach]=zn;nach++;d=konec;}else d=konec;
char temp[1000];
for(int k=0;d<=len;d++,k++){temp[k]=mass[d];temp[k+1]='\0';};
mass[nach]='\0';
strcat(mass,temp);
i=nach;
znak=0;cifr=0;
}
konec=nach=i;nk=1;
}
 
}
}
cout<<mass;
}
0
mikykonst
0 / 0 / 1
Регистрация: 29.10.2014
Сообщений: 89
03.05.2015, 22:57  [ТС] 7
А можно как-то с использованием функции memmove?
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
03.05.2015, 23:33 8
mikykonst,
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main(){
    setlocale(LC_ALL,"");
 
    char S[]=" раз   два2   три ,!*  чет4ыре    пять    6есть   11 ";
    char buf[255]={""};
    char Result[255]={""};
 
    int count=0;
    int pos=0;
 
    unsigned lenS=strlen(S);
 
    for (unsigned int i=0;i<lenS;i++){
        if (S[i] != ' '){
            while (S[i] != ' ') {
                buf[count++]=S[i++];
                buf[count]='\0';  //Если обнулять memmove в самом начале, то что-то не работает, поэтому руками сделано
            }
        }       
            buf[count++]=S[i];
            buf[count]='\0';
        
        
        for (unsigned int j=0;j<strlen(buf);j++){
            if (buf[j]>='0' && buf[j]<='9') goto l1;
        }
        
        strcat(Result,buf);  //Добавляем в конец результирующей строки полученное слово без цифр или разделитель (знак препинания или пробел)
        l1:;
            memmove(buf,"\0",255*sizeof(char)); //Обнуление с memmove
            count=0;
    }
    cout<<Result<<"\n";
    cin.get();
}
0
03.05.2015, 23:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2015, 23:33

Из заданного файла удалить все слова c двумя согласными и вывести на экран оставшиеся слова
Привет всем, в с++ не очень шарю, а до строк в изучении еще не дошел , поэтому ...

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

Строки: удалить из исходного предложения все слова, оканчивающиеся гласной
Удалите из исходного предложения все слова, оканчивающиеся гласной. Предложение...


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

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

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