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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Код Грея http://www.cyberforum.ru/cpp-beginners/thread253313.html
Помогите написать программу Написать программу преобразования прямого двоичного числа в код Грея и программу обратного преобразования (предварительно написав функцию представления десятичного...
C++ Ошибка С2446 Помогите решить проблему над ошибкой С2446.Код: //нажатие клавиши в поле Сумма private: System::Void textBox1_KeyPress(System::Object^ sender, ... 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...
C++ Вычисления n-го члена арифметической прогрессии http://www.cyberforum.ru/cpp-beginners/thread253278.html
Помогите пожалуйста написать программы по рекурсии мне в среду срочно сдать их надо: Написать рекурсивную программу: вычисления n-го члена арифметической прогрессии вычисление суммы n первых...
C++ Работа с вектором Задание: Вектор В сформировать из целых случайных чисел в диапазоне . а) найти минимальный элемент вектора. б) найти произведение Р ненулевых элементов. в) вставить за min элементом... подробнее

Показать сообщение отдельно
Ma3a
Эксперт С++
618 / 462 / 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;
    }
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru