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

strncpy - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 17:04     strncpy #1
Дана строка: djh,dfkh,sdj.
Как последовательно по отдельности записать в strncpy текстовые части:
djh
dfkh
sdj
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1764 / 987 / 60
Регистрация: 29.03.2010
Сообщений: 2,983
06.05.2011, 17:10     strncpy #2
уточните, что вам нужно сделать ибо вы написали примерно следующее: есть бумага с текстом "абра, швабра, кадабра" как с помощью копира (ксерокса) разбить текст на слова.
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 17:28  [ТС]     strncpy #3
Одно большое слово такое без пробелов: slovo="абра,швабра,катабра"
C
1
2
3
for(int k = 0; k <= strlen(a); k++){ 
 if (!isalpha(a[k]))  strncpy(stro, a, k);
}
Берется только первое слово: aбра
Дальше как скопировать второе, третье слово
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1764 / 987 / 60
Регистрация: 29.03.2010
Сообщений: 2,983
06.05.2011, 17:35     strncpy #4
эм... вы передаёте в ctrncpy первым параметром указатель на область памяти куда хотите копировать, потом указатель на то, что вы хотите копировать, а дальше размер (если я не ошибаюсь), посему, вам нужно сделать результирующий массив, или динамический или сравнительно большой статический и в него запихивать ваши строки, что то типа result[100][20] - 100 строк, каждая строка по 20 символов. а дальше уже делаете strncpy(result[i], a + k, wordSize); в общем как-то так
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 17:44  [ТС]     strncpy #5
Я не думаю, что для этого нужен двумерный массив.
И массив мне с этими словами совсем не нужен.
Эти слова нужны просто нужны для отдельного чтения
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1764 / 987 / 60
Регистрация: 29.03.2010
Сообщений: 2,983
06.05.2011, 17:53     strncpy #6
замечательно, тогда вернёмся к тому, с чего начали, что конкретно Вам нужно? (желательно прочитайте, то что вы пишите перед отправлением, т.к. вопросы совершенно не понятные)
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 18:09  [ТС]     strncpy #7
Читаю слова из файла от пробела до пробела
Очередное слово в переменной a="sdf,sdfa,dfgsa"
Мне нужно выделить в переменную slovo последовательно слова:
slovo="sdf"
затем я с ним выполняю какие-то действия
потом получить slovo="sdfa"
затем я с ним выполняю какие-то действия
потом получить slovo="dfgsa"
затем я с ним выполняю какие-то действия
и т.д.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
06.05.2011, 18:30     strncpy #8
strtok
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 18:33  [ТС]     strncpy #9
Мне это не подходит, т.к. знаки пунктуации мне тоже нужны для работы. Это отдельная тема.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
06.05.2011, 19:02     strncpy #10
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define DELIM ":;,.?! "
 
char* mystrndup(const char* src, int num)
{
    char* dest = (char*)malloc(sizeof(char) * num + 1);
    memcpy((char*)dest, (const char*)src, num);
    dest[num] = '\0';
    return dest;
}
 
int main(void)
{
    char s[] = "djh,dfkh,sdj";
    char* pch = s;
    char* token;
    int n;
 
    while(*pch)
    {
        if(!strchr(DELIM, *pch))
        {
            n = 0;
            do ++n; while(!strchr(DELIM, *(pch+n)));
            token = mystrndup(pch, n); // token = strndup(pch, n);
 
            // делаем что-то с token...
            
            free(token);
            pch+= n;
        }
        else ++pch;
    }
 
    return 0;
}
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 19:09  [ТС]     strncpy #11
Так этот tok выдал ту же строчку только без знаков
Мне надо отдельно, т.е.
tok=djh
затем
tok=dfkh
и т. д.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
06.05.2011, 19:15     strncpy #12
Цитата Сообщение от Елочка Посмотреть сообщение
Мне надо отдельно, т.е.
tok=djh
затем
tok=dfkh
и т. д.
Так, а я что написал? ) Результат: http://codepad.org/ywZmUexE
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 19:23  [ТС]     strncpy #13
Ссылка недоступна.
У меня вышел результат: djhdfkhsdj
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
06.05.2011, 19:39     strncpy #14
Покажи код(каким образом у тебя получается такой результат).
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 19:44  [ТС]     strncpy #15
Что прислали то и запущено

C
1
2
3
4
5
6
7
8
9
10
11
if(!strchr(DELIM, *pch))
        {
            n = 0;
            do ++n; while(!strchr(DELIM, *(pch+n)));
            tok = mystrndup(pch, n);  // tok = strndup(pch, n);
 
             cout<<tok;  // просмотр полученного  
            
            free(tok);
            pch+= n;
        }
 Комментарий модератора 
Используйте теги форматирования кода!
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
06.05.2011, 19:46     strncpy #16
Вот так:
C++
1
cout << tok << '\n';
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
06.05.2011, 19:48  [ТС]     strncpy #17
Так мне переменная нужна
Мне же с ней работать
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
06.05.2011, 20:04     strncpy #18
Цитата Сообщение от Елочка Посмотреть сообщение
Так мне переменная нужна
Мне же с ней работать
Так и работай с ней, кто ж мешает-то? )

Добавлено через 4 минуты
Может тебе так будет более понятно...
C++
1
2
3
4
5
//...
tok = mystrndup(pch, n);  
puts(tok);  // выводим tok на экран           
free(tok);
//...
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
07.05.2011, 10:45     strncpy #19
Нужно так:
C++
1
2
3
4
5
6
7
int i = 0;
for(int k = 0; k <= strlen(a); k++){ 
     if (!isalpha(a[k])) {
          stro[i++] = a[k];
здесь работа со словом wegy
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2011, 10:58     strncpy
Еще ссылки по теме:

ошибка 4996 strncpy C++
Аналог strncpy и strncmp для типа string C++
Поведение функции strncpy C++

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

Или воспользуйтесь поиском по форуму:
Елочка
2 / 2 / 0
Регистрация: 26.03.2011
Сообщений: 100
07.05.2011, 10:58  [ТС]     strncpy #20
В этом случае в stro находятся знаки
Мне нужны там тексты
Yandex
Объявления
07.05.2011, 10:58     strncpy
Ответ Создать тему
Опции темы

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