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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 5.00
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
#1

Скопировать часть строки - C++

31.05.2013, 18:45. Просмотров 2650. Ответов 28
Метки нет (Все метки)

Как мне скопировать часть строки с элемента a по элемент b?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2013, 18:45     Скопировать часть строки
Посмотрите здесь:

Скопировать часть строки - C++
Здравствуйте. Имеется 2 строки AnsiString str1 = "123456"; AnsiString str2; Как скопировать часть строки str1 в строку...

Как скопировать часть строки до определенного символа? - C++
Допустим, пользователь вводит с клавиатуры строку. Необходимо скопировать часть строки до какого-то определенного символа и поместить ее в...

Std::copy как скопировать часть строки массива byte? - C++
Вот из этой строки: BYTE pbHash; Нужно скопировать содержимое с 0й по 15ю ячейку, в эту строку: BYTE bAesKey; Так будет? ...

Скопировать из файла часть символов - C++
Требуется скопировать часть файла(txt) с позиции n до позиции m в поток и посчитать в этой части количество цифровых символов. не могу...

Скопировать часть одного вектора в другой, в обратном порядке - C++
как скопировать часть одного вектора в другой, при этом отсчет с конца V1 = 1,2,3,4,5 v2 должен ровняться 5,4,3

Как скопировать часть массива WCHAR в массив BYTE? - C++
Пытаюсь зашифровать строку в AES. wTextIn - исходный текст wTextOut - шифрованный byte bDataBlocks = {0}; // Буффер WCHAR *...

Скопировать второе слово каждой строки в начало следующей строки - C++
Привет, прошу помощи! Заранее спасибо! Индивидуальное задание: Скопировать второе слово каждой строки в начало следующей строки ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.06.2013, 10:57     Скопировать часть строки #16
Вот неплохой ответ про различие size_t и std::size_t:
http://stackoverflow.com/questions/5...-and-stdsize-t
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
01.06.2013, 11:05     Скопировать часть строки #17
Различий в типах нет. Об этом там и говорится. size_t находится как в глобальном, так и в std пространстве.
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
02.06.2013, 13:02  [ТС]     Скопировать часть строки #18
А как тогда мне int преобразовать в size_t?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
02.06.2013, 13:22     Скопировать часть строки #19
C++
1
2
int a = 5;
size_t b = (size_t)a;
А зачем тебе преобразовывать? Ты изначально используй size_t.
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
02.06.2013, 16:49  [ТС]     Скопировать часть строки #20
Вот тогда ещё вопрос. Почему у меня в функцию передаётся только первый элемент строки?
Функция которая получает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void ADDAST(char* name, int price)
{
    int id;
    while(true)
    {
    srand(time(NULL));
    id=rand();
    if (AST_HEAD==NULL)
    {
        break;
    }
    if (id!=AST_HEAD->elem.id)
    {break;}
    }
    SPK<AST> *Z=new SPK<AST>;
    Z->elem.id=id;
    Z->elem.name=name;
    Z->elem.price=price;
    Z->next=AST_HEAD;
    AST_HEAD=Z;
}
Функция которая вызывает. Я проверил, на момент вызова в "HEAD.elem.name" была полная, нормальная строка.
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
void TRUEINFAST(char * path) {
 
    ifstream F;
    F.open(path,ios::out);
    char s[30];
    char * xStr = new char[];
    //char xStr[30];
    CLRAST();
    SPK<astL> HEAD;
    while(!F.eof())
    {
        int j=0, k=0;
        size_t sq1=NULL, sq2=NULL;
        F>>s;
        if (s[0]!='1') break;
         for (int i = 0; i < strlen(s); i++)
         {
              if (s[i] == '@')
              {
                  j++;
                if (j<2)  k=i;
                if (j==2)
                {
                    sq1=(size_t)(i-1-k);
                    sq2=(size_t)(k+1);
                  strncpy(xStr,s+sq2,sq1);
                  xStr[sq1]='\0';
                  HEAD.elem.id=atoi7(xStr);
                  k=i;
                }
                if (j==3)
                {
                    sq1=(size_t)(i-1-k);
                    sq2=(size_t)(k+1);
                    strncpy(HEAD.elem.name,s+sq2,sq1);
                    HEAD.elem.name[sq1]='\0';
                    k=i;
                }
                if (j==4)
                {
                    sq1=(size_t)(i-1-k);
                    sq2=(size_t)(k+1);
                    strncpy(xStr,s+sq2,sq1);
                    xStr[sq1]='\0';
                    HEAD.elem.price=atoi7(xStr);
                    k=i;
                }
                }
         }
    }
    ADDAST(HEAD.elem.name, HEAD.elem.price);
    PRTAST();
}
Добавлено через 2 часа 2 минуты
Притом данная функция работает без проблем
C++
1
2
3
4
5
6
7
8
9
10
11
int atoi7 (char *str) 
{
 
    for (int i=0; str[i] != '\0'; i++){
        if (!isdigit(str[i])) 
        {
            return 0;
        }
    }
    return atoi(str);
}
Владимир_1994
2 / 2 / 0
Регистрация: 19.05.2013
Сообщений: 27
02.06.2013, 17:02     Скопировать часть строки #21
Если речь идет про стринг, то string s1 = s.substr(c какого символа, сколько символов); где s - это та строка из которой копируешь.
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
02.06.2013, 18:59  [ТС]     Скопировать часть строки #22
Владимир_1994, Я уже всё удачно скопировал, мне теперь интересно что не так с функцией
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
03.06.2013, 17:27     Скопировать часть строки #23
Как ты думаешь, что делает эта строка: char * xStr = new char[]; ?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.06.2013, 18:00     Скопировать часть строки #24
Цитата Сообщение от lazybiz Посмотреть сообщение
что делает эта строка: char * xStr = new char[]; ?
А Вы ответ не даете потому что
Цитата Сообщение от lazybiz Посмотреть сообщение
Чем меньше знаете вы, тем ценнее я как разработчик.
?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
03.06.2013, 18:03     Скопировать часть строки #25

Не по теме:

Tulosba, совершенно верно!)



Добавлено через 1 минуту
Хотя, на самом деле, мне просто интересно что ТС думает по этому поводу.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.06.2013, 19:14     Скопировать часть строки #26
lazybiz, что думает ТС, понятно. Не понятно почему компилятор ms такое допускает. Отсутствие размерности в скобках равносильно наличию там нуля.
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
03.06.2013, 19:48  [ТС]     Скопировать часть строки #27
Компилятор мне выдаёт 49 предупреждений но всё норм. Компилятор 2010 года выдаёт ещё 7 ошибок, но всё работает без ошибок.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
03.06.2013, 19:56     Скопировать часть строки #28
Цитата Сообщение от Grey5 Посмотреть сообщение
но всё работает без ошибок.
Цитата Сообщение от Grey5 Посмотреть сообщение
Почему у меня в функцию передаётся только первый элемент строки?
Как так получается?
Ответь на 23-й пост.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 20:33     Скопировать часть строки
Еще ссылки по теме:

Отбросить от строки последние N символов и вывести оставшуюся часть строки - C++
:help: 1. Лабораторная работа №1. Ввод-вывод в стандартные файлы. Задание: разработать программу с использованием базовых системных...

Строка: Определите длину введенной строки, и если она кратна 4, то поменяйте местами первую часть строки со второй - C++
Разработайте программу работы со строками. Организуйте ввод исходных данных с клавиатуры. Используйте функции из библиотеки обработки...

Скопировать только буквы строки - C++
Доброго всем здравия, духовного и телесного. Хочу скопировать строку без пробелов, знаков препинания, цифр. Будьте добры укажите на...

Скопировать в файл F2 только четные строки из F1 - C++
Постановка задачи: Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию Выполнить задание. При...

Скопировать string из одной строки в другую - C++
надо из одной строки в другую определенное количество символов с определенной позиции Например: #include &lt;string&gt; #include &lt;iostream&gt;...


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

Или воспользуйтесь поиском по форуму:
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
03.06.2013, 20:33  [ТС]     Скопировать часть строки #29
Теперь новая задача, как не допустить вызов функции добавления в список, при наличии в файле двух одинаковых записей?
То есть не надо допустить вызова функции ADDASTF
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
void TRUEINFAST(char * path) {
    bool flag;
    ifstream F;
    F.open(path,ios::out);
    char s[200];
    char * xStr = new char[];
    //char xStr[30];
    CLRAST();
    SPK<astL> *HEAD;
    while(!F.eof())
    {
        flag=false;
        HEAD = new SPK<astL>;
        int j=0, k=0;
        size_t sq1=NULL, sq2=NULL;
        F>>s;
        if (s[0]=='1')
        {
         for (int i = 0; i < strlen(s); i++)
         {
              if (s[i] == '@')
              {
                  j++;
                if (j<2)  k=i;
                if (j==2)
                {
                    sq1=(size_t)(i-1-k);
                    sq2=(size_t)(k+1);
                  strncpy(xStr,s+sq2,sq1);
                  xStr[sq1]='\0';
                  HEAD->elem.id=atoi7(xStr);
                  for (SPK<AST> *TEMP = AST_HEAD; TEMP != NULL; TEMP = TEMP->next){
                    if (TEMP->elem.id==atoi7(xStr)) {flag=true;}else{flag=false;}}
                  k=i;
                }
                if (j==3)
                {
                    sq1=(size_t)(i-1-k);
                    sq2=(size_t)(k+1);
                    strncpy(HEAD->elem.name,s+sq2,sq1);
                    HEAD->elem.name[sq1]='\0';
                    k=i;
                }
                if (j==4)
                {
                    sq1=(size_t)(i-1-k);
                    sq2=(size_t)(k+1);
                    strncpy(xStr,s+sq2,sq1);
                    xStr[sq1]='\0';
                    HEAD->elem.price=atoi7(xStr);
                    k=i;
                }
                }
         }
         if (flag) continue;
         ADDASTF(HEAD->elem.id, HEAD->elem.name, HEAD->elem.price);
        }
    }
    
    PRTAST();
}
Добавлено через 3 минуты
lazybiz, Да не, я потом там чутка подправил. Прописал
C++
1
HEAD = new SPK<astL>;
.
И я без понятия что делает эта строка, видимо вызывает программиста, и он дописывает код.
Yandex
Объявления
03.06.2013, 20:33     Скопировать часть строки
Ответ Создать тему
Опции темы

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