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

Требуется консультация по АйСиКью прямо сейчас - C++

Восстановить пароль Регистрация
 
dido11
0 / 0 / 0
Регистрация: 06.05.2010
Сообщений: 4
10.12.2010, 23:09     Требуется консультация по АйСиКью прямо сейчас #1
Ребята, срочно нужно написать простую программку на Си++, а я эту Си вижу второй раз в жизни.
Кому не сложно и кто не слишком занят, отпишите мне плз в аську (три сорк четыре девять три 0 6 пятьдесят).
Буду по ходу написания мучить вопросами, в основном по синтаксису, с алгоритмом решения вроде всё ясно.

Добавлено через 2 часа 50 минут
Желающих помочь по аське не нашлось, спрошу на форуме.
Нужно добавить символ в начало строки, делаю следующим образом:
C++
1
2
3
4
5
6
for (j=1;j<=2;j++)
{
for (i=LenStr; i>=0;i--)
Str[i+1]=Str[i];
Str[0]='*';
}
Null с конца массива не переносится конечно, и размерность массива не увеличивается, то есть происходит так:
строка
*строк
**стро
Как сделать, чтобы работало так, как нужно мне?
Пожалуйста ответьте максимально развёрнуто, ибо я С++ вижу действительно второй раз в жизни.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.12.2010, 23:13     Требуется консультация по АйСиКью прямо сейчас #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main ()
{
    std::string str;
    char ch;
    std::cout << "Input string: ";
    std::getline(std::cin, str);
    std::cout << "Input char: ";
    std::cin >> ch;
    str.insert(str.begin(), ch);
    std::cout << str;
    return 0;
}
dido11
0 / 0 / 0
Регистрация: 06.05.2010
Сообщений: 4
10.12.2010, 23:18  [ТС]     Требуется консультация по АйСиКью прямо сейчас #3
А если всё-таки оставить реализацию строки как массива чаров?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.12.2010, 23:19     Требуется консультация по АйСиКью прямо сейчас #4
Цитата Сообщение от dido11 Посмотреть сообщение
А если всё-таки оставить реализацию строки как массива чаров?
Зачем?Если так проще.
dido11
0 / 0 / 0
Регистрация: 06.05.2010
Сообщений: 4
10.12.2010, 23:34  [ТС]     Требуется консультация по АйСиКью прямо сейчас #5
Затем, что я не знаю, как реализовать строки через string, а через char более-менее разобрался.
Действительно дурацкая ситуация, к утру нужно сдать программу написанную на языке, на котором я никогда не писал.

Добавлено через 12 минут
Разобрался, я дурак просто, ведь я заранее определил
C++
1
LenStr=strlen(Str);
а теперь удивляюсь, что размерность массива не увеличивается
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.12.2010, 23:48     Требуется консультация по АйСиКью прямо сейчас #6
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
#include <stdio.h>
#include <string.h>
#include <windows.h>
 
int main(void){
    char * str = "string", * pstr;
    int len = strlen(str);
    int i, j;
    
    printf("%s", str);
    for ( i = 1; i <= len; ++i ){
        Sleep(1000);
        for ( j = 0; j < len; ++j )
            putchar('\b');
        for ( j = 0; j < i; ++j )
            putchar('*');
        pstr = str;
        while ( j++ < len )
            putchar(*pstr++);
    }
    putchar('\n');
    
    return 0;
}
dido11
0 / 0 / 0
Регистрация: 06.05.2010
Сообщений: 4
11.12.2010, 01:58  [ТС]     Требуется консультация по АйСиКью прямо сейчас #7
Закончил программку, оцените плз, на сколько всё убого?
Ещё раз подчеркну, что это первый раз работы на Срр, то есть я открывал гугл, вбивал, к примеру, "работа со строками С++" или там "for в С++" и так вот делал.
Просто укажите на конкретные косяки в этом коде, не тыкая в то что, возможно, стоило делать всё иначе.
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
#include <cstdlib>
#include <iostream>
#include <cstring>
 
using namespace std;
 
char MainStr[100] = "qwtrrtytweqwtwrertwerqwteqrweyqwerwterererqetwerqywrerrqywertqwrtqwrreqywterr";
char Str[100] = "terer";
int i,j,k,l,m,n,index;
int LenMainStr;
int LenStr;
 
 
 
int main(int argc, char *argv[])
{
LenMainStr=strlen(MainStr);
LenStr=strlen(Str);
 
 
for (i=1;i<=LenStr&&i!=0;)
{
     cout<<MainStr<<endl<<Str<<endl;     //Выводит главную строку (MainStr) и искомую строку (Str)                     
     if (MainStr[strlen(Str)-i]==Str[strlen(Str)-i])   //Если последний символ главной строки и последний символ искомой строки совпали...
     {
          cout<<MainStr[strlen(Str)-i]<<"="<<Str[strlen(Str)-i]<<endl;   //То показывает, что они совпали...
          i++;                                                           //И сравнивает следующий (предыдущий) символ
     }
     else                                                                //Иначе
     {
          cout/*<<"i= "<<i<<endl*/<<MainStr[strlen(Str)-i]<<"=/="<<Str[strlen(Str)-i]<<endl;   //Показывает, что они не совпали
          //i=0;
          if (i==1)                                                                            //Если не совпал 1ый символ
          {          
               //cout<<"MainStr[strlen(Str)-i]= "<<MainStr[strlen(Str)-i]<<endl;             
               m=0;                                                                            //Счётчик будующих звёздочек
               //cout<<strlen(Str)-i<<endl<<strlen(Str)-i-LenStr<<endl;
               //for (n=strlen(Str)-i;n>strlen(Str)-i-(LenStr-1);n--)
               n=strlen(Str)-i;                                                 //Возвращает индекс несовпавшего символа
               do                                                               //Проверяет вхождение несовпавшего символа в искомую строку
               {                                                                //
                   //cout<<"!"<<endl;                                           //
                    if (MainStr[strlen(Str)-i]!=Str[n])                         //Если несовпавший символ главной строки не равен Nному
                    {                                                           //символу искомой строки
                         //cout<<"Str[n]= "<<Str[n]<<endl;                      //                      
                         m=m+1;                                                 //То счётчик звёздочек возрастает
                         //cout<<"m= "<<m<<endl;                                //
                    }                                                           //
                    n--;                                                        //Счётчик N уменьшается, чтобы провериь следующий (предыдущий) символ
               }                                                                //искомой строки
               while (n>strlen(Str)-i-LenStr&&MainStr[strlen(Str)-i]!=Str[n]);  //Пока не проверит все символы искомой строки, либо не найдёт            
          }                                                                     //совпадения
          else                                                                                  //Если-таки совпал не 1ый эл-нт
          m=1;                                                                                  //Ниже добавляется только 1 звёздочка
          
          for (j=1;j<=m;j++)                                           //Добавляет определённое кол-во звёздочек в начало искомой строки
          {                                                            //
               for (k=strlen(Str); k>=0;k--)                           //
               Str[k+1]=Str[k];                                        //
               Str[0]='*';                                             //
               //cout<<Str<<" "<<"strlen "<<strlen(Str)<<endl;         //
               i=1;                                                    //
               index=index+1;                                          //
               //system("PAUSE");                                      //
          }
    
     }
   
}
 cout<<"Matching found, it's index= "<<index<<endl;  
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Забыл добавить, это как бы упрощённый Алгоритм поиска Бойера-Мура, без таблицы суффиксов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2010, 02:00     Требуется консультация по АйСиКью прямо сейчас
Еще ссылки по теме:

C++ Проверить, пользуются ли сейчас клавиатурой
Стоит ли сейчас учить C++? C++
Определить, является ля треугольник прямо-, остро- или тупоугольным C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.12.2010, 02:00     Требуется консультация по АйСиКью прямо сейчас #8
dido11, Глобальные переменные и волшебные числа - главный косяк любого кода
Yandex
Объявления
11.12.2010, 02:00     Требуется консультация по АйСиКью прямо сейчас
Ответ Создать тему
Опции темы

Текущее время: 02:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru