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

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

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

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

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

Из введённой с клавиатуры строки нужно удалить все символы не являющиеся латинскими буквами.
Удалить что-либо не проблема а вот как задать условие, что нужно удалять?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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;
}
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 20:38  [ТС]     Удаление из строки #3
спасибо но мне нужно на turbo с всё осуществить, и такой код не примут
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
08.02.2011, 20:42     Удаление из строки #4
Predvestnik, Дык если нет проблем с удалением и нужно только узнать про условие... Сравниваете, используя функцию isalpha.
C++
1
2
3
4
if(!isalpha(str[i]))
{
   //Удаляем символ
}
И так по всей строке...
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 20:45  [ТС]     Удаление из строки #5
эта функция проверяет является ли символ латинской буквой, я правильно понял?
доп библиотеку нужно для неё подключать?
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
08.02.2011, 20:49     Удаление из строки #6
Цитата Сообщение от Predvestnik Посмотреть сообщение
эта функция проверяет является ли символ латинской буквой, я правильно понял?
Да.
Цитата Сообщение от Predvestnik Посмотреть сообщение
доп библиотеку нужно для неё подключать?
C
1
#include <ctype.h>
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 20:51  [ТС]     Удаление из строки #7
спасибо, теперь попробую делом заняться)))
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
}
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();
 
}
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
08.02.2011, 22:08     Удаление из строки #10
В моем примере читается строка со стандартного вывода, размером до 4096 байт, создается новая переменная result размером с количество введенных символов + 1 на символ 0, копируются в неё из введенной строки те символы, которые совпадают с символами латинского алфавита. Без функции isalpha.

Не по теме:

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

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

то я какраз понял, а вот зачем free(result);
и bufer....
MILAN
883 / 777 / 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;
 
}
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
08.02.2011, 22:24     Удаление из строки #13
free чтобы память выделенную освободить.
buffer -- чтобы считать в него много байт из потока (стандартный ввод).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2011, 23:10     Удаление из строки
Еще ссылки по теме:

Задача.Строки.Удаление C++
Строки (Удаление слова из строки) C++
C++ Строки. Удаление идентификаторов
C++ Удаление строки из файла
Удаление подстрок из строки C++

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

Или воспользуйтесь поиском по форуму:
Predvestnik
7 / 6 / 2
Регистрация: 09.10.2010
Сообщений: 192
08.02.2011, 23:10  [ТС]     Удаление из строки #14
Спасибо всем, из всех вариантов получилось сделать один нормальный=)
Yandex
Объявления
08.02.2011, 23:10     Удаление из строки
Ответ Создать тему
Опции темы

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