uForum.uz

uForum.uz (https://uforum.uz/index.php)
-   C/C++, Прикладные вопросы (https://uforum.uz/forumdisplay.php?f=162)
-   -   Вырезать подстроку из строки S с SBEGIN позиции до SEND позиции? (https://uforum.uz/showthread.php?t=8340)

Botirbek Samandarov 17.03.2009 18:48

Вырезать подстроку из строки S с SBEGIN позиции до SEND позиции?
 
Написал вот такой код
Код:

#include <iostream.h>
#include <string.h>
char *copystr(char *s, int sbegin, int send);
main()
{
cout <<"Satrni kiriting -> ";
char satr[256];
cin.getline(satr, 256);
cout<<copystr(satr, 5, 3);
}

char *copystr(char *s, int sbegin, int send)
{
int i,j=0;
char *rez = new char[send];
for (i=sbegin-1; i<sbegin+send-1; i++)
{
        rez[j]=s[i];
        j++;
}
return rez;
}

Где допустил ошибку?

shumbola 17.03.2009 19:49

Цитата:

Сообщение от Botirbek Samandarov (Сообщение 192614)
Где допустил ошибку?

Ошибка в выборе книжки для изучения С++.

DarkUser 17.03.2009 20:18

Цитата:

Сообщение от Botirbek Samandarov (Сообщение 192614)
Где допустил ошибку?

это типа загадка, да?!

Dolphin 17.03.2009 20:38

Судя по инклудам в стиле "<>", копилятор с++. Собственно класс стринга уже подключен. Почему бы не юзать стандартные процедуры для работы со строками? Или нужен код именно в ANSI C?

shumbola 17.03.2009 20:49

Цитата:

Сообщение от Eclipse (Сообщение 192650)
Или нужен код именно в ANSI C?

Код написан ни на ANSI C, ни на ANSI/ISO С++. Скорее всего код написан человеком, который только начал изучение С++ и выбрал себе плохой учебник. ;-)

DarkUser 17.03.2009 20:59

Цитата:

Сообщение от shumbola (Сообщение 192652)
человеком, который только начал изучение С++

Суровые каракалпакские кодеры сначала преподают С++ в университете, а уже потом его-же изучают...

Botirbek Samandarov 18.03.2009 10:40

Цитата:

Сообщение от Eclipse (Сообщение 192650)
Судя по инклудам в стиле "<>", копилятор с++. Собственно класс стринга уже подключен. Почему бы не юзать стандартные процедуры для работы со строками? Или нужен код именно в ANSI C?

Я не нашел стандартную функцию для вырезки подстроки, наверно и нету (Как в паскале copy(s, sbegin, send) )

Botirbek Samandarov 18.03.2009 10:57

Всем спасибо
Я просто забыл добавить конец строки
Код:

#include <iostream.h>
char *copystr(char *s, int sbegin, int send);
main()
{
cout <<"Satrni kiriting -> ";
char satr[256];
cin.getline(satr, 256);
cout<<copystr(satr, 5, 3);
}

char *copystr(char *s, int sbegin, int send)
{
int i,j=0;
char *rez = new char[send];
for (i=sbegin-1; i<sbegin+send-1; i++)
{
        rez[j]=s[i];
        j++;
}
rez[j]='\0';
return rez;
}

если ест другие варианты, жду

Dolphin 18.03.2009 11:21

Код:

// string::substr
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str="We think in generalities, but we live in details.";
                            // quoting Alfred N. Whitehead
  string str2, str3;
  size_t pos;

  str2 = str.substr (12,12); // "generalities"

  pos = str.find("live");    // position of "live" in str
  str3 = str.substr (pos);  // get from "live" to the end

  cout << str2 << ' ' << str3 << endl;

  return 0;
}


vcoder 21.04.2009 09:30

Цитата:

Сообщение от Timur Rasulov (Сообщение 192650)
Судя по инклудам в стиле "<>", копилятор с++. Собственно класс стринга уже подключен. Почему бы не юзать стандартные процедуры для работы со строками? Или нужен код именно в ANSI C?

Тимур, Вы подтруниваете над человеком, который только начал изучение С++, однако Ваш код тоже не безупречен.
Все мы когда-то начинали...
Объявление всех переменных в самом начале функции это тоже стиль С, а не С++.

IMHO, так больше на С++ похоже:

Код:

// string::substr
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  const string str = "We think in generalities, but we live in details.";
                            // quoting Alfred N. Whitehead

  const string str2 = str.substr (12,12); // "generalities"

  const size_t pos = str.find("live");    // position of "live" in str
  const string str3 = str.substr(pos);  // get from "live" to the end

  cout << str2 << ' ' << str3 << endl;

  return 0;
}



Текущее время: 02:33. Часовой пояс GMT +5.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
OOO «Единый интегратор UZINFOCOM»