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

Исключение символов из строки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ перевод ip адреса в двоичную и шестнадцатиричную системы http://www.cyberforum.ru/cpp-beginners/thread706669.html
Помогите, пожалуйста! На экране имеется 3 окошка: В одно вы вводите число в десятичной системе В двух других вычисляются значения в двоичной и шестнадцатиричной системе.
C++ Реализовать задачу с помощью цикла Необходимо переписать программу через цикл (for, while и тд без разницы) Очень прошу помочь. Вот код:#include <iostream> #include <string> #include <algorithm> int main() { long long number = 8647369240173465929; std::string str = to_string(number); std::sort(str.begin(), str.end()); std::cout<<"Two max numbers: "<<*(str.end() - 1)<<", "<<*(str.end()-2)<<std::endl; http://www.cyberforum.ru/cpp-beginners/thread706641.html
Ошибка компиляции. int main() C++
При компиляции выдает ошибку, пишет что не поддерживает int по умолчанию. #include <stdio.h> #include <conio.h> int a = { 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
C++ перестановка n символов текста
Доброго времени суток! Помогите, пажалуйста, написать программу, которая переставляет n-ое количество символов (n - целое число, вводимое пользователем с клавиатуры) строки, в зависимости от знака числа n: если положительное, то берется n символов с начала строки и перестаналивается назад, если отрицательное, то берется n символов с конца строки и перестаналивается вперед. Например: строка...
C++ Убрать символ при выводе http://www.cyberforum.ru/cpp-beginners/thread706553.html
У меня есть программа, которая меня цвет и вид курсора мыши. И выводит на экран какая кнопка мыши нажата. Но у меня почему-то еще в конце, после надписи с нажатой кнопкой выводит символ "H", как сделать, чтобы он не выводился: Вот код: #include<dos.h> #include<stdio.h> #include<conio.h> #include<stdlib.h> union REGS reg; void ms_tform(int type, int mask1, int mask2);
C++ Программа чтения из файла Подскажите пожалуйста возможный алгоритм решения задачи: Таблица произвольной структуры в файле (база данных). Колонки таблицы могут содержать данные следующих типов: -целое -вещественное -ряд символов ограниченной(заданной) размерности -ряд символов неограниченной размерности. В начале файла содержится описание структуры таблицы: подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
24.11.2012, 16:12     Исключение символов из строки
Так как используются совместно русские и английские символы, лучше всего использовать вместо char wchar_t

Добавлено через 1 час 35 минут
Далее нужно объявить указатель и воспользоваться автоматическим приведением типов:
что то вроде:
C++
1
2
3
4
if( *cp_ptr >= 'A' && *cp_ptr <= 'z' )                                                       
     ++eng;                                                                                   
else                                                                                         
     ++rus;
Или просто
C++
1
2
3
4
if( *cp_ptr >= 65 && *cp_ptr <= 122 )                                                       
     ++eng;                                                                                   
else                                                                                         
     ++rus;
Добавлено через 20 часов 41 минуту
Вот функция, которая соответствует Вашему условию без использования сторонних функций типа isalpha() и strtok():
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
 
void eng_rus( wchar_t *text );
 
int main( void )
{
    if( !setlocale(LC_ALL, "en_US.utf8") )
    EXIT_FAILURE;
    
    /* Это "не правильный вариан строки в стиле С.
       В "правильном" варианте строка должна оканчиваться
       символом конца строки \n. Поэтому этот нюанс
       мы учтём при написании функции. */
    wchar_t line[] = L"    Здесь долqжен   r   быть your,  text!";
    
    eng_rus( line );
    
    EXIT_SUCCESS;
}
 
void eng_rus( wchar_t *text )
{
    /*    if( !setlocale(LC_ALL, "en_US.utf8") )
      EXIT_FAILURE; */
    int i, j, f, eng, rus;
    
    for( i = 0; text[i] != '\0'; ++i );
    // создадим временный массива для обработки.
    wchar_t new_text[i+2]; // 2 нужно для символа конца файла и строки
    
    // уберём лишние пробелы
    for( j = i = 0; text[j] != '\0'; ) {
    if( text[j] == ' ' || text[j] == '\t' ) {
        new_text[i++] = ' ';
        while( text[++j] == ' ' );
    }
    else
        new_text[i++] = text[j++];
    }
    new_text[i] = '\n';
    new_text[++i] = '\0';
    
    // проверим на совместное использование русских
    // и английских символов
    for( i = j = f = rus = eng = 0; new_text[i] != '\0'; ++i) {
    if( new_text[i] != ' ' ) {
        j = i; // запоним счётчик
        while( new_text[i] != ' ' && new_text[i] != '\0') {
        if( new_text[i] <= 128 && new_text[i] >= 0 ) {
            ++eng;
            ++i;
        }
        else {
            ++rus;
            ++i;
        }
        }
    }
    if( rus && eng )
        rus = eng = 0;
    else {
        i = j;
        rus = eng = 0;
        while( new_text[i] != ' ' && new_text[i] != '\n' && new_text[i] != '\0') {
        text[f++] = new_text[i++];
        }
        if( new_text[i] == ' ')
        text[f++] = ' ';
    }
    }
    text[f] = '\n';
    text[++f] = '\0';
    
    i = 0;
    while( text[i] != '\0' )
    putwchar( text[i++] );
    
    return;
}
Добавлено через 31 минуту
Обнаружил логическую ошибку: если слово, например, состоит только из русских символов и после него идёт запятая( ASCII ), программа посчитает за комбинированное использование и не запишет слово в массив. Нужно заменить строки с 52-58:
C++
1
2
3
4
5
6
7
8
9
10
if( new_text[i] >= 'A' && new_text[i] <= 'z' ) {                                                
     ++eng;                                                                                      
     ++i;                                                                                        
}                                                                                               
else if( new_text[i] > 128 ) {                                                                  
     ++rus;                                                                                      
     ++i;                                                                                        
}                                                                                               
else                                                                                         
      ++i;
 
Текущее время: 09:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru