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

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

Войти
Регистрация
Восстановить пароль
 
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
#1

Удаление из строки - C++

08.02.2011, 19:52. Просмотров 765. Ответов 13
Метки нет (Все метки)

Из введённой с клавиатуры строки нужно удалить все символы не являющиеся латинскими буквами.
Удалить что-либо не проблема а вот как задать условие, что нужно удалять?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2011, 19:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление из строки (C++):

Здесь есть удаление столбца, как добавить удаление строки - C++
#include <iostream> #include <conio.h> using namespace std; int main() { int n; do {cout << "Razmer massiva: "; cin >> n;...

Удаление строки из файла\либо удаление самого файла. - C++
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE *fout; open_file("abase.dat"); ...

Строки (Удаление слова из строки) - C++
с нахождением слова проблем не возникает, а вот с удалением всех вхождений этого слова проблема! задание:Найти самое длинное слово...

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

Удаление из строки - C++
Здравствуйте,сразу к делу, есть строка, в ней записан исходный код программы, нужно заменить все переменные на букву(допустим i)и имена...

Удаление строки - C++
Есть одна задача на удаление строки. Переделывал с другой задачи, там было на удаление и с ограничением по кол-ву символов в строке. Если...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.02.2011, 20:02 #2
Predvestnik,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    str.erase(std::remove_if(str.begin(), str.end(),[](char t) {return !isalpha(t);}), str.end());
    std::cout<<str<<'\n';
    return 0;
}
Добавлено через 2 минуты
Без лямбды.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <functional>
 
struct eraser:public std::unary_function<char, bool>
{
    result_type operator () (argument_type one)
    {
        return !isalpha(one);
    }
};
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    str.erase(std::remove_if(str.begin(), str.end(), eraser()), str.end());
    std::cout<<str<<'\n';
    return 0;
}
0
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 20:38  [ТС] #3
спасибо но мне нужно на turbo с всё осуществить, и такой код не примут
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.02.2011, 20:42 #4
Predvestnik, Дык если нет проблем с удалением и нужно только узнать про условие... Сравниваете, используя функцию isalpha.
C++
1
2
3
4
if(!isalpha(str[i]))
{
   //Удаляем символ
}
И так по всей строке...
0
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 20:45  [ТС] #5
эта функция проверяет является ли символ латинской буквой, я правильно понял?
доп библиотеку нужно для неё подключать?
0
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
08.02.2011, 20:49 #6
Цитата Сообщение от Predvestnik Посмотреть сообщение
эта функция проверяет является ли символ латинской буквой, я правильно понял?
Да.
Цитата Сообщение от Predvestnik Посмотреть сообщение
доп библиотеку нужно для неё подключать?
C
1
#include <ctype.h>
0
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 20:51  [ТС] #7
спасибо, теперь попробую делом заняться)))
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.02.2011, 20:55 #8
Цитата Сообщение от Predvestnik Посмотреть сообщение
Удалить что-либо не проблема а вот как задать условие, что нужно удалять?
Операторами условных переходов, операторами циклов и булевыми выражениями.

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
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) {
  const int k_buffer_size = 4096;
  char buffer[k_buffer_size];
  fgets(buffer, k_buffer_size, stdin);
 
  char *result = (char*)malloc(strlen(buffer) + 1);
 
  char *source_symbol = buffer;
  char *destination_symbol = result;
  while (*source_symbol != '\0')
    if ((*source_symbol >= 'a' && *source_symbol <= 'z') ||
        (*source_symbol >= 'A' && *source_symbol <= 'Z'))
      *(destination_symbol++) = *(source_symbol++);
    else
      ++source_symbol;
  *destination_symbol = '\0';
 
  printf("%s\n", result);
 
  free(result);
  return 0;
}
0
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 21:15  [ТС] #9
да с функцией isalpha чёт не получается, не пойму чё, а вот в Вашем коде, lemegeton , не всё пойму
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 "stdafx.h"
#include <conio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
 
void main()
{
        char st[256];
        int i,k;
        printf("Vvedite stroku simvolov:\n");
        scanf("%s",st);  
        printf("Ishodnaja stroka:\n%s\n",st);
        printf("\nResult\n");
        for(i=0; i<strlen(st)-1; i++)
        {
            if(!isalpha(st[i]))
                {
                  for(k=i; k<strlen(st);k++)
                  {
                      st[k]=st[k+1];// сдвигаем все символы влево
                  }
                                           
                }
    
        }
       printf("%s",st); 
       getch();
 
}
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.02.2011, 22:08 #10
В моем примере читается строка со стандартного вывода, размером до 4096 байт, создается новая переменная result размером с количество введенных символов + 1 на символ 0, копируются в неё из введенной строки те символы, которые совпадают с символами латинского алфавита. Без функции isalpha.

Не по теме:

Цитата Сообщение от Predvestnik Посмотреть сообщение
спасибо но мне нужно на turbo с всё осуществить
Цитата Сообщение от Predvestnik Посмотреть сообщение
#include "stdafx.h"
Turbo C такой Turbo C. ^____________^

0
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 22:13  [ТС] #11
осуществить нужно на турбо си, но делаю не себе поэтому до окончательного результата буду делать там где мне удобней =)

то я какраз понял, а вот зачем free(result);
и bufer....
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
08.02.2011, 22:20 #12
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
int main()
{
    char str[256];
    int i;
    printf("Enter string -> ");
    gets(str);
    printf("\nResult ->");
     for(i=0; i<strlen(str); i++)
     {
         if(((str[i]>=65 && str[i]<=90) || (str[i]>=97 && str[i]<=122))) 
         {
             printf("%c",str[i]);
         }
     }
    getch(); 
    return 0;
 
}
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.02.2011, 22:24 #13
free чтобы память выделенную освободить.
buffer -- чтобы считать в него много байт из потока (стандартный ввод).
0
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 23:10  [ТС] #14
Спасибо всем, из всех вариантов получилось сделать один нормальный=)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2011, 23:10
Привет! Вот еще темы с ответами:

Строки.Удаление . - C++
Помогите пожалуйста.Вообще понять не могу. Вводится строка текста. Удалить последние N слов, содержащих заданную подстроку. Заданная...

Удаление из строки - C++
Помогите пожалуйста! Заранее спасибо) Удалить текст, содержащийся в обрабатываемом файле, начиная с первой встретившейся буквы ‘М’ до...

Строки. Удаление слов - C++
1)Даны два слова(1 строка) . Из первого слова удалить все буквы, которые встречаются во втором слове.

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.02.2011, 23:10
Ответ Создать тему
Опции темы

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