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

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

Войти
Регистрация
Восстановить пароль
 
gekas
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 70
#1

Указатели и действия над указателями - C++

20.05.2014, 20:05. Просмотров 509. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
char *ptr, result[250], s1[250];
 
ptr = strtok(s1, " ");
 
if (strstr(result, strcpy(" ", strcpy(ptr, " "))) == NULL) strcat_s(result, strcpy(ptr, " "));
Программа слетает на участке с проверкой условия. Подскажите, почему и как исправить?
Миниатюры
Указатели и действия над указателями  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2014, 20:05     Указатели и действия над указателями
Посмотрите здесь:

Указатели. Работа с указателями - C++
Здравствуйте, товарищи. Хотел у вас поподробнее выяснить что такое указатели.Точнее я понял, что это указатель - это переменная, которая...

арифметические действия с указателями не работают - C++
На одном сайте (http://www.c-cpp.ru/books/arifmeticheskie-deystviya-s-ukazatelyami) написано, что с при увеличении указателя на единицу,...

Операции над указателями - C++
int var = 123; int *p = &var; (*p)++ и ++*p это одно и тоже. В первом случае приоритет задал скобками. 1)Тогда почему *p++ и...

Прога написана с указателями,как указатели заменить ссылками - C++
Доброго времени суток. Прога написана с указателями,как указатели заменить ссылками? #include <iostream> #include <ctime> ...

Действия над матрицами - C++
Привет программистам ! помогите плз вот в таком задании: ***** с клавиатуры задать матрицы А(n x n) и В(n x n). вычислит матрицу...

Действия над матрицами - C++
Помогите выполнить действия над матрицами в С++ 2(А+В)(2В-А), где 3 4 5 А= 5 6 2 -1 3 1 -1 0 5 В = 0 1 3 ...

Действия над арифметическим рядом - C++
Написать программу, позволяющую в зависимости от введенного параметра Pr (например, 1, 2, 3) выполнить одно из следующих действий: 1....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.05.2014, 20:13     Указатели и действия над указателями #2
Цитата Сообщение от gekas Посмотреть сообщение
почему
потому что первый параметр strcpy никак не может быть строковым литералом
Цитата Сообщение от gekas Посмотреть сообщение
C++
1
strcpy(" ", strcpy(ptr, " "))
Цитата Сообщение от gekas Посмотреть сообщение
и как исправить?
зависит от того что вы делаете и что вам надо
nmcf
5122 / 4442 / 1481
Регистрация: 14.04.2014
Сообщений: 17,639
20.05.2014, 20:14     Указатели и действия над указателями #3
s1 инициализирована?
Первый параметр strcpy() не может быть константой.
gekas
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 70
20.05.2014, 20:19  [ТС]     Указатели и действия над указателями #4
Надо найти в строке result все слова (группа символов, разделенная пробелом), равные слову, на которое указывает текущий ptr. Если такие слова не найдены, то добавить в строку result строку, на который указывает ptr.
То есть искать надо ptr с пробелами с обоих сторон.
Цитата Сообщение от Jupiter Посмотреть сообщение
strcpy никак не может быть строковым литералом
как тогда "обернуть" str в пробелы для поиска этой подстроки в строке s1?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.05.2014, 20:22     Указатели и действия над указателями #5
Цитата Сообщение от gekas Посмотреть сообщение
Надо найти в строке result все слова (группа символов, разделенная пробелом), равные слову, на которое указывает текущий ptr. Если такие слова не найдены, то добавить в строку result строку, на который указывает ptr.
То есть искать надо ptr с пробелами с обоих сторон.
перед тем как "поганить" строку strtok-ом нужно её скопировать, и осуществлять поиск в копии
Цитата Сообщение от gekas Посмотреть сообщение
как тогда "обернуть" str в пробелы?
Strtok противоположность
gekas
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 70
20.05.2014, 20:35  [ТС]     Указатели и действия над указателями #6
Цитата Сообщение от nmcf Посмотреть сообщение
s1 инициализирована?
Инициализирована:
C++
1
2
3
4
for (int i = 0; i < size; i++)
        s1[i] = '\0';               // Зполняем строку нуль-символом
    
    cin.getline(s1, size);
Кликните здесь для просмотра всего текста
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
#include <cctype>
#include <cstring>
#include <string>
#include "conio.h"
#include "stdio.h"
#include <cstdio>
#define size 250
 
using namespace std;
 
void showStr(char* str){
    cout << "Строка:";
    for (int i = 0; i < size; i++) cout << str[i];
    cout << endl;
}
 
void checkStr(char * str){
    for (int i = 0; i < size; i++){
        if ((str[i] == ' ') && (str[i + 1] == ' ')) for (int j = i; j < size; j++) str[j] = str[j + 1];
    }
}
 
void main() {
    setlocale(LC_ALL, "Russian");
    char s1[size], result[size], *ptr, *resPtr;
 
 
 
    for (int i = 0; i < size; i++){
        s1[i] = '\0';               // Заполняем строку нуль-символом
        result[i] = '\0';
    }
    result[0] = ' ';
    cin.getline(s1, size);
    checkStr(s1);                   //Убираем пробелы, которые идут подряд
    while (s1[lengthStr] != '\0') lengthStr++;  //Ищем индекс последнего символа строки
 
    if (lengthStr == -1){
        cout << "Строка пустая!" << endl;
        system("Pause");
        exit;
    }
    
 
    ptr = strtok(s1, " ");
    
while (ptr!=NULL){
        
    if (strstr(result, strcpy(" ", strcpy(ptr, " "))) == NULL) strcat_s(result, strcpy(ptr, " "));  // ***
    
        ptr = strtok(NULL, " ");
    }
 
showStr(result);
    system("Pause");
}


Добавлено через 5 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
перед тем как "поганить" строку strtok-ом нужно её скопировать, и осуществлять поиск в копии
Поиск не в s1, а в строке result, которую мы не "поганим" strtok'om

Кликните здесь для просмотра всего текста
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
#include <cctype>
#include <cstring>
#include <string>
#include "conio.h"
#include "stdio.h"
#include <cstdio>
#define size 250
 
using namespace std;
 
void showStr(char* str){
    cout << "Строка:";
    for (int i = 0; i < size; i++) cout << str[i];
    cout << endl;
}
 
void checkStr(char * str){
    for (int i = 0; i < size; i++){
        if ((str[i] == ' ') && (str[i + 1] == ' ')) for (int j = i; j < size; j++) str[j] = str[j + 1];
    }
}
 
void main() {
    setlocale(LC_ALL, "Russian");
    char s1[size], result[size], *ptr, *resPtr;
 
 
 
    for (int i = 0; i < size; i++){
        s1[i] = '\0';               // Заполняем строку нуль-символом
        result[i] = '\0';
    }
    result[0] = ' ';
    cin.getline(s1, size);
    checkStr(s1);                   //Убираем пробелы, которые идут подряд
    while (s1[lengthStr] != '\0') lengthStr++;  //Ищем индекс последнего символа строки
 
    if (lengthStr == -1){
        cout << "Строка пустая!" << endl;
        system("Pause");
        exit;
    }
    
 
    ptr = strtok(s1, " ");
    
while (ptr!=NULL){
        
    if (strstr(result, strcpy(" ", strcpy(ptr, " "))) == NULL) strcat_s(result, strcpy(ptr, " "));  // ***
    
        ptr = strtok(NULL, " ");
    }
 
showStr(result);
    system("Pause");
}


Добавлено через 6 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
Сообщение от gekas
как тогда "обернуть" str в пробелы?
Strtok противоположность
Можете продемонстрировать использование sprintf на конкретном примере (обернуть ptr в пробелы)? Буду очень признателен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2014, 20:39     Указатели и действия над указателями
Еще ссылки по теме:

Действия над типом Char - C++
Как узнать сколько содержит сиволов, пустая ли она, содержит ли одни буквы переменная N: ///Подключение библиотек ... char N; ...

Арифметические действия над числами - C++
Арифметические действия над числами пронумерованы следующим образом: 1 – сложение, 2 – вычитание, 3 – умножение, 4 – деление. Дан номер...

Марицы и действия над ними - C++
Помогите пожалуйста, я в С++ полный чайник, а очень надо решить задачку. Задачка такого типа: Определить сумму четных элементов...

Массив строк и действия над ним - C++
Вводится массив строк символов. Необходимо найти самую длинную строку, и увеличить все строки остальные до ее размеров используя символ...

Действия над массивами (объединение, разность) - C++
Создать класс в котором есть массив, его нужно разбить на 2 массива. В еще одном классе эти массивы нужно использовать как множества чисел...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.05.2014, 20:39     Указатели и действия над указателями #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
char buf[100];
sprintf(buf, " %s ", ptr);
с защитой от переполнения:
C++
1
snprintf(buf, 100, " %s ", ptr);
Yandex
Объявления
20.05.2014, 20:39     Указатели и действия над указателями
Ответ Создать тему
Опции темы

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