Просмотр полной версии : Вырезать подстроку из строки S с SBEGIN позиции до SEND позиции?
Botirbek Samandarov
17.03.2009, 18:48
Написал вот такой код
#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
Где допустил ошибку?
Ошибка в выборе книжки для изучения С++.
DarkUser
17.03.2009, 20:18
Где допустил ошибку?
это типа загадка, да?!
Судя по инклудам в стиле "<>", копилятор с++. Собственно класс стринга уже подключен. Почему бы не юзать стандартные процедуры для работы со строками? Или нужен код именно в ANSI C?
shumbola
17.03.2009, 20:49
Или нужен код именно в ANSI C?
Код написан ни на ANSI C, ни на ANSI/ISO С++. Скорее всего код написан человеком, который только начал изучение С++ и выбрал себе плохой учебник. ;-)
DarkUser
17.03.2009, 20:59
человеком, который только начал изучение С++
Суровые каракалпакские кодеры сначала преподают С++ в университете, а уже потом его-же изучают...
Botirbek Samandarov
18.03.2009, 10:40
Судя по инклудам в стиле "<>", копилятор с++. Собственно класс стринга уже подключен. Почему бы не юзать стандартные процедуры для работы со строками? Или нужен код именно в 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;
}
если ест другие варианты, жду
// 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;
}
Судя по инклудам в стиле "<>", копилятор с++. Собственно класс стринга уже подключен. Почему бы не юзать стандартные процедуры для работы со строками? Или нужен код именно в 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;
}
Тимур, Вы подтруниваете над человеком, который только начал изучение С++, однако Ваш код тоже не безупречен.
Это не мой код. Это первый ответ гугла на запрос "c++ substr".
IMHO, так больше на С++ похоже:
А зачем все константами - то?
shumbola
21.04.2009, 19:07
А зачем все константами - то?
А чтоб было. :-)
ИМХО, перебор с const, тем более пример не про const. ;-)
А зачем все константами - то?
Чтобы случайно не изменить.
Если не собираешься изменять переменную, то имеет смысл сделать ее константной - меньше вероятность наделать багов.
Кроме того это может помочь компилятору оптимизировать код, например не создавать объекты, а произвести вычисления в процессе компиляции. Правда это вряд-ли осуществимо в приведенном примере.
ИМХО, перебор с const, тем более пример не про const. ;-)
Лучше больше, чем меньше.
С непривычки может выглядить дико, но моя практика показыват что такой "фанатичный" подход может съэкономить десяки часов отладки, когда меняется переменная, которая по замыслу меняться не должна.
shumbola
22.04.2009, 19:42
ИМХО, перебор с const, тем более пример не про const. ;-)
Лучше больше, чем меньше.
С непривычки может выглядить дико, но моя практика показыват что такой "фанатичный" подход может съэкономить десяки часов отладки, когда меняется переменная, которая по замыслу меняться не должна.
Во всем должна быть мера. Я выше не зря писал "тем более пример не про const.". const и const-коррекность заслуживает отдельную тему. Если хотите откройте тему и обучайте. ;-)
#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
Код: ...
с добрым утром, блин...
vBulletin® v3.8.5, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot