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

Работа со строками - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Код Грея http://www.cyberforum.ru/cpp-beginners/thread253313.html
Помогите написать программу Написать программу преобразования прямого двоичного числа в код Грея и программу обратного преобразования (предварительно написав функцию представления десятичного числа в двоичной системе счисления)
C++ Ошибка С2446 Помогите решить проблему над ошибкой С2446.Код: //нажатие клавиши в поле Сумма private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { if ((e->KeyChar >= "0") && (e->KeyChar <= "9")) //цифра return; Пишется: Ошибка 1 error C2446: >=: нет преобразования "const char *" в "int" Что нужно... http://www.cyberforum.ru/cpp-beginners/thread253303.html
C++ функция
всем привет. Вот создал функцию, хотел попробовать в действии char* rander(char* string, int start = 9) { int size = strlen(string); char* newstr; int i = 0; while( i < start ) {
Объединить два кода в один C++
Всё понятно из названия темы... Но если не сложно - объединённый код представить через структуру функций. #include <iostream> #include <conio.h> #define size 10 using namespace std; int main(void) { int arr;
C++ Вычисления n-го члена арифметической прогрессии http://www.cyberforum.ru/cpp-beginners/thread253278.html
Помогите пожалуйста написать программы по рекурсии мне в среду срочно сдать их надо: Написать рекурсивную программу: вычисления n-го члена арифметической прогрессии вычисление суммы n первых членов арифметической прогрессии a1=2 d=4;
C++ Работа с вектором Задание: Вектор В сформировать из целых случайных чисел в диапазоне . а) найти минимальный элемент вектора. б) найти произведение Р ненулевых элементов. в) вставить за min элементом произведение ненулевых элементов. г) найти номер максимального из 10 последних элементов вектора Заранее благодарен... подробнее

Показать сообщение отдельно
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
16.03.2011, 18:34     Работа со строками
А можно пример, где у вас неправильно работает? У меня отрабатывает нормально. Насчет первого слова: в ваших кодах у вас перед преобразованием gazN делается вызов gaz(str, n), который в соответствии со своим предназначением меняет n первых символов строки местами в обратном порядке, так что если этот вызов затрагивает это первое слово в строке, то естественно, что оно поменяется и не пройдет кастинг.

Полный листинг программы

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#include <cstring>
 
using namespace std;
 
void myStrCpy(char * , char * );
void myStrCpy(char * , char * , int);
int myStrLen(char * );
bool myStrCmp(char * , char * );
 
int isAlfa (char s)
    {
    if (s>='a' && s<='z' || s>='A' && s<='Z'|| s>='а' && s<='п' || s>='р' && s<='я' || s>='А' && s<='Я')
        return 1;
    return 0;
    }
 
char *strAlfa(char *str, int& len)
    {
    len=0;
    for ( ; !isAlfa(*str) && *str; str++);
    if (*str==0)
        return 0;
    char *p=str;
    for ( ; isAlfa(*str); str++, len++);
    return p;
    }
 
void gaz(char *str, int n)
    {
    char p;
    int i, j;
    for (i=0, j=n-1; i<j; i++, j--)
        {
        p=*(str+j);
        *(str+j)=*(str+i);
        *(str+i)=p;
        }
    }
 
char *gazN(char *str, int n)
    {
    int len;
    char * next_sub_p = str;
    for(int i = 1; (next_sub_p = strAlfa(next_sub_p, len));++i, next_sub_p += len)
        if(i % n == 0)
            gaz(next_sub_p,len);
    return next_sub_p;
    }
 
int main (void)
    {
    setlocale(LC_ALL,"rus");
    char str[100];
    char str2[100];
    int n, len;
    cout << "n = ";
    cin >> n;
    cout << "Введите строку: ";
    cin.sync();
    cin.get(str, sizeof(str));
    strcpy(str2,str);
 
    if(strAlfa(str, len))
        {
        //gaz(str, n); 
        gazN(str, n);
        cout << str;
        }
 
    cout << endl << "Неизмененные слова: ";
    int count;
 
    char * next_sub_p1 = str;
    char * next_sub_p2 = str2;
    char fragment[100];
    int len1,len2;
 
    for(count = 0; (next_sub_p1 = strAlfa(next_sub_p1, len1)) &&
        (next_sub_p2 =strAlfa(next_sub_p2,len2));
        next_sub_p1 += len1, next_sub_p2 += len2)
        if(myStrCmp(next_sub_p1,next_sub_p2) == true)
            {
            ++count;
            int fraglen;
            strAlfa(next_sub_p1,fraglen);
            myStrCpy(fragment,next_sub_p1,fraglen);
            cout << fragment << " ";
            }
    cout << endl << "Количество не измененных слов :" << count << endl;
 
        return 0;
    }
 
void myStrCpy(char * dest, char * src)
    {
    int len = strlen(src);
    int i;
    for(i = 0; i < len; ++i)
        dest[i] = src[i];
    dest[i] = '\0';
    }
 
void myStrCpy(char * dest, char * src, int len)
    {
    int i;
    for(i = 0; i < len; ++i)
        dest[i] = src[i];
    dest[i] = '\0';
    }
 
int myStrLen(char * str)
    {
    for(int i = 0,len = strlen(str); i < len; ++i)
        if(!isAlfa(*(str + i)))
            return i;
    return strlen(str);
    }
 
bool myStrCmp(char * str1,char * str2)
    {
    int len1 = myStrLen(str1),len2 = myStrLen(str2);
 
    if(len1 != len2)
        return false;
 
    for(int i = 0; i < len1; ++i)
        if(str1[i] != str2[i])
            return false;
 
    return true;
    }
 
Текущее время: 10:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru