Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> есть номер символа с которого нужно копировать до, пробела - неудаётся сделать :( 
:(
    Опции темы
Elfet
Дата 24.9.2004, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



вот есть - х="стронгпрогрнл прпрке"
и от "г" нужно копировать строку до " "
и получится в конце с="прогрнл"
sad.gif sample.gif withstupid.gif


--------------------
PM MAIL WWW Skype   Вверх
shedon
Дата 24.9.2004, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



вот наволял на скорую руку, алгоритм не лишён ошибок, так нет контроля на ошибки, но работает.
Код

char x[] = "стронгпрогрнл прпрке";
char s[20];
int z = strlen(x);

// Ищем поз. буквы 'г'
for(int i=0; i<strlen(x); i++) {
 if('г'==x[i]) break;
}
// ищем позицию пробела
for(int l=i; l<strlen(x); l++) {
 if(' ' == x[l]) break;
}

// копируем
memcpy(s, x+i, l-i);
s[l-i] = '\0';

не проверял, но работать вроде должно wink.gif


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 24.9.2004, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



shedon
Мне кажется второй цикл излишен, ну или memcpy лишнее wink.gif
Код
 char *p = "стронгпрогрнл прпрке";

 int X=6; // number of sumbol
 
 char Buff[1024];

 for (char* i=p+X, *Temp=Buff; *i; ++i, ++Temp )
 {
   if ( (*i) == 32 ) { *Temp=0; break; }
   *Temp=*i;
 }

 printf(Buff);
 



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
cardinal
Дата 24.9.2004, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



bel_nikita, вообще memcpy работает намного эффективней, чем *Temp=*i; в цикле...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
bel_nikita
Дата 24.9.2004, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



cardinal
Цитата
вообще memcpy работает намного эффективней, чем *Temp=*i; в цикле...

С этим я абсолютно согласен.

Но в данном случае, код ввиде: (пример 1)
Код
// ищем позицию пробела
for(int l=i; l<strlen(x); l++) {
if(' ' == x[l]) break;
}

// копируем
memcpy(s, x+i, l-i);
s[l-i] = '\0';

офиген-нннно проигрывает коду: (пример 2)
Код
 for (char* i=p+X, *Temp=Buff; *i; ++i, ++Temp )
 {
   if ( (*i) == 32 ) { *Temp=0; break; }
   *Temp=*i;
 }

Вот, если из первого примера вынести strlen(x) за цикл. Т.е. вычислить перед циклом. То тогда пример 1 опередит пример 2. Но выйгрышь будет не таким офигенным, как 2-го примера перед 1-ым. Во, как. smile.gif

Это сообщение отредактировал(а) bel_nikita - 24.9.2004, 21:24


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Elfet
Дата 24.9.2004, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



а я вот до чиго дошёл smile.gif
Код
    char *per;
    int addper=0;
    while(t[z+addper]!=' '&&addper<strlen(t)){per[addper]=t[z+addper]; addper++;}


всем ограммное спасибо! thumbs-up.gif

ЗЫ, а может мы вилосипед изобретаем? может есть уже функция где-нибудь ? smile.gif


--------------------
PM MAIL WWW Skype   Вверх
shedon
Дата 24.9.2004, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Цитата(Elfet @ 24.9.2004, 18:29)
ЗЫ, а может мы вилосипед изобретаем? может есть уже функция где-нибудь

если юзаешь мфц, то есть такой класс CString smile.gif


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 24.9.2004, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Elfet плохо smile.gif

Так лучше:
Код

 char *per;
 int addper=0;
 int Len=strlen(t);
 while(t[z+addper]!=' '&&addper<Len){per[addper]=t[z+addper]; addper++;}




--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 24.9.2004, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(Elfet @ 24.9.2004, 20:29)
может есть уже функция где-нибудь ?

Какая бы функция не была всё сведётся к тому же smile.gif

shedon самый оптимальный способ предложил, только я бы в ещё на скорость соптимировал:

Код
#include<iostream.h>
#include<stdio.h>
#include<string.h>

int main()
{
char x[] = "asdfasfdafdkjijijtiji sfgs";
char *begunok=x;
char s[20];
int z;

//сдвинем указатель на первуйу букву
for(;*begunok!='k';begunok++);

//strlen луцше вынести за цикл
z=strlen(begunok);

//ищем индекс последней буквы
for(int i=0;begunok[i]!=' ';i++);

//копируем
memcpy(s, begunok, i);

//обозначаем конец строки
s[i]=0;

cout<<s<<endl;
return 0;
}





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Elfet
Дата 24.9.2004, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(sergej @ 24.9.2004, 22:43)
скорость соптимировал

smile.gif thumbs-up.gif



--------------------
PM MAIL WWW Skype   Вверх
sergejzr
Дата 24.9.2004, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



qstn.gif
А вчём прикол?

Ах да, strlen нафиг не нужен smile.gif

Код
#include<iostream.h>
#include<stdio.h>
#include<string.h>

int main()
{
char x[] = "asdfasfdafdkjijijtiji sfgs";
char *begunok=x;
char s[20];

//сдвинем указатель на первуйу букву
for(;*begunok!='k';begunok++);

//ищем индекс последней буквы
for(int i=0;begunok[i]!=' ';i++);

//копируем
memcpy(s, begunok, i);

//обозначаем конец строки
s[i]=0;

cout<<s<<endl;
return 0;
}


Это сообщение отредактировал(а) sergej.z - 24.9.2004, 22:00


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.