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

Указатели char* - конкатенация без <string.h> - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как переделать на функцию программу? http://www.cyberforum.ru/cpp-beginners/thread317086.html
#include<stdio.h> #include<conio.h> #include<stdlib.h> using namespace std; int main() { int a; int i,s=0,j=0,k=0; printf("Vash massiv: "); for(i=0;i<15;i++)
C++ Массивы Всем привет, помогите пожалуйста разобраться: Дан массив, нужно записать каждый 3-й элемент этого массива в новый массив. http://www.cyberforum.ru/cpp-beginners/thread317079.html
указатели на функции C++
люди прошу помогите разобраться с задачами ....1. Створити динамічний масив вказівників для збереження двовимірного масиву А у динамічній пам’яті. Скласти програму для підрахунку суми парних елементів масиву А розміру m×n, використовуючи функцію обробки елементів.2)1. Скласти програму, яка перетворює невпорядковані масиви В та С таким чином: обмінює значення елементів з максимальним значенням...
С помощью перегрузки операторов складывать, вычитать натуральные дроби C++
Господа, делали лабу, задачка на дроби. С помощью дружественного класса нужно было складывать, вычитать натуральные дроби. Вроде что-то наваял(сам,честно), но у меня вопрос: можно ли сделать подобное с помощью перегрузки операторов? #include<iostream> #include<string.h> using namespace std; class Fract { private: int top,bottom;
C++ Задaчa-курсач про клетки и их стороны http://www.cyberforum.ru/cpp-beginners/thread317063.html
Вася нарисовал на клетчатой бумаге многоугольник,все стороны которого проходят по линиям сетки.После этого в каждой клетке он написал число равное количеству сторон данной клетки которые принадлежатсторона многоугольника.Затем он стер многоугольник так что листок бумаги в каждой клетке которого написано число.Восстановите нарисованый Васей многоугольник. Это полный текст, не могу понять, как...
C++ Ошибка С2664 error C2664: MessageBoxW: невозможно преобразовать параметр 2 из 'const char ' в 'LPCWSTR' 1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции Уже не первый раз ее встречаю. Появляется после запуска примеров из книг/с сайтов. Данные коды компилились на MVS2005 и MVS2006 (по крайней мере... подробнее

Показать сообщение отдельно
x-positive
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 21
11.06.2011, 21:04  [ТС]     Указатели char* - конкатенация без <string.h>
accept,

Цитата Сообщение от accept Посмотреть сообщение
тут уже кажется без ошибок: if (!s1)
а ошибка всё таки была...
правильно будет так:
C
1
if (!*s1)
Цитата Сообщение от accept Посмотреть сообщение
для stdin есть getchar()
Им я и воспользовался, спасибо за советы )

Цитата Сообщение от accept Посмотреть сообщение
это метод новичков, который приводит к тому, что каждый раз приходится снова разбираться в программе
ну, я и есть новичок)) теперь прислушиваюсь к советам и стараюсь придерживаться всего сказанного. в связи с вышеперечисленным, сделал много изменений в программе и добавил немного функциональности)) полный код моей программы выглядит теперь так:

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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#define  MAX       128    //length of strings
#define  ENTER     '\x0a'
#define  ENDLINE   '\0'  
#define  MSGRESULT "\nРезультат:\n"
#define  MSGNOFIND "\aНе найдено строки s1 в строке s."
#define  MSGGETS   "Введите строку s, в которой следует найти подстроку s1:"
#define  MSGGETS1  "\nВведите s1, которую следует найти в строке s и выделить с обеих строн пробелами:"
 
char* StrStr(char*s, char*s1)
{
 char *copy_s;
 char *copy_s1 = s1;
 
 while (*s)
  {
   copy_s = s;
 
   while (*s++ == *s1++)
     if (!*s1)
       return copy_s;
 
   s1 = copy_s1;
  }
 
 return NULL;
}
 
char* StrIns(char*s,char*s1,char*p)
{
 int   i  = 0;
 int   n;
 char *pp = (char*)malloc(MAX);
 
 while(*p)
  {
   *pp++ = *p++; [111]
    i++;
  }
 *pp = ENDLINE;
 n=i;
 for (i; i; i--)
  {
   *pp --;
   *p  --;
  }
 
 while(*s1)
  {
   *p++ = *s1++;
   i++;
  }
 
 while(*pp)
  {
   *p++ = *pp++;
  }
 *p  = ENDLINE;
 for(i+=n;i;i--)
  *p --;
 
 //free(pp);
 return s;
}
 
main()
{
 char  s[MAX];
 char  s1[MAX];
 char* space=" ";
 char* find=(char*)malloc(MAX);
 char* msg=(char*)malloc(MAX);
 int   i=0;
 int   len_S1;
 
// prototipes:
 
 char* StrStr(char*,char*);
 char* StrIns(char*,char*,char*);
 
 CharToOem(MSGGETS,msg);
 puts(msg);
 do s[i]=getchar();
 while(s[i++]!=ENTER);
 s[i-1]=ENDLINE;
 
 i=0;
 
 CharToOem(MSGGETS1,msg);
 puts(msg);
 do s1[i]=getchar();
 while(s1[i++]!=ENTER);
 s1[i-1]=ENDLINE;
 len_S1=i-1;
 
 CharToOem(MSGRESULT,msg);
 puts(msg);
 
 if (find = StrStr(s,s1))
 {
  do
  {
    StrIns(s,space,find);
    for (i=0;i<len_S1+1;i++)
     find++;
    StrIns(s,space,find);
    find++;
  }
  while (find = StrStr(find,s1));
  puts(s);
 }
 else
  {
   CharToOem(MSGNOFIND,msg);
   puts(msg);
  }
 
 free(find);
 free(msg);
 getch();
 return 0;
}
ОШИБКА находится в строке 67
C
1
//free(pp);
Правда хоть я от неё и избавился, но ошибка в программе осталась. Хоть и работает она теперь безотказно. Ошибка в том, что я попросту закомментировал строку
C
1
free(pp);
которая и выдавала сбой всё время, чего делать естественно нельзя. Теперь ищу пути её вернуть туда снова, чтобы она не выбивала программу.

Цитата Сообщение от accept Посмотреть сообщение
надо читать про них
надо читать про него
я всё время читаю, как только обнаруживаю что-нибудь важное, чего я не знаю.
про динамическую память теперь читаю.

Цитата Сообщение от accept Посмотреть сообщение
string - это из C++
твой код - это C
C и C++ - разные языки
что они разные давно подметил)) только учу я в основном С ) и хоть я и программировал-то на С++ )) а уж программа-то получилась на С ) а под строками в данный момент я подразумевал массив символов ))

accept, огромное спасибо за краткий курс обучения) спасибо за помощь в выявлении ошибок, программа работает) сто из ста )) разберусь с последней ошибкой будет всё супер!

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