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;
}


Dolphin 21.04.2009 12:22

Цитата:

Сообщение от vcoder (Сообщение 207331)
Тимур, Вы подтруниваете над человеком, который только начал изучение С++, однако Ваш код тоже не безупречен.

Это не мой код. Это первый ответ гугла на запрос "c++ substr".
Цитата:

Сообщение от vcoder (Сообщение 207331)
IMHO, так больше на С++ похоже:

А зачем все константами - то?

shumbola 21.04.2009 19:07

Цитата:

Сообщение от Timur Rasulov (Сообщение 207406)
А зачем все константами - то?

А чтоб было. :-)

ИМХО, перебор с const, тем более пример не про const. ;-)

vcoder 22.04.2009 09:18

Цитата:

Сообщение от Timur Rasulov (Сообщение 207406)
А зачем все константами - то?

Чтобы случайно не изменить.
Если не собираешься изменять переменную, то имеет смысл сделать ее константной - меньше вероятность наделать багов.

Кроме того это может помочь компилятору оптимизировать код, например не создавать объекты, а произвести вычисления в процессе компиляции. Правда это вряд-ли осуществимо в приведенном примере.

vcoder 22.04.2009 09:24

Цитата:

Сообщение от shumbola (Сообщение 207760)
ИМХО, перебор с const, тем более пример не про const. ;-)

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

shumbola 22.04.2009 19:42

Цитата:

Сообщение от vcoder (Сообщение 207973)
Цитата:

Сообщение от shumbola (Сообщение 207760)
ИМХО, перебор с const, тем более пример не про const. ;-)

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

Во всем должна быть мера. Я выше не зря писал "тем более пример не про const.". const и const-коррекность заслуживает отдельную тему. Если хотите откройте тему и обучайте. ;-)

dovdir 21.05.2009 13:50

Код:

#include <stdio.h>

char *substr(const char *,int,int);

int main(){
    char a[]="SalomDunyo";
    char *s;
    s=substr(a, 6, strlen(a));
    printf("%s",s);
    return 0;
}

char *substr(const char *suz, int p, int n){
    char *pS=suz+p-1;
    char *buf = malloc(sizeof(char)*(n-p+2));
    int i;
    for(i=0;i<=n-p;i++)
        *buf++ = *pS++;
    *buf ='\0';
    return buf-(n-p+1);
}


DarkUser 21.05.2009 15:37

Оффтоп:
Цитата:

Сообщение от dovdir (Сообщение 221034)
Код: ...

с добрым утром, блин...


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

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