|
удаление лишнего пробелма в строке
|
|
|
|
shplint |
Пятница, 06 Февраля 2009, 16:09
|
Участник
Профиль
Группа: Участник
Сообщений: 156
Регистрация: 22.10.2005
Из: Россия, Семенов
Пользователь №: 9791
Конфигурация
Корпус: -- Процессор: Athlon 64 (socket 754/939/AM2) Материнская плата: Epox 9npa+ Оперативная память: SUMSUNG 256Мб,+384мб Видеокарта: Ati radeon x700 Жесткий диск (винчестер): Seagate Barracuda IV 340016A Дисковод: Нет дисковода CD/DVD: TEAC DW-552G, LG-GCR8500B Модем: smart ax mt880 Сетевой адаптер: -- Звуковая плата: -- Монитор: SUMSUNG SM 753DFX Операционная система: Windows XP Прочее: --
![](style_images/1/spacer.gif)
|
int main(int argc, char* argv[]) { char *str,*buf; int pos,i,length,offset; offset=0; printf("Enter string->"); str=new char [50]; buf=(char*)calloc(50,sizeof(char)); gets(str); str[50]='\0'; buf[50]='\0'; length=strlen(str); printf("\nlength string->%d",length); if(length>49) { printf("\nERROR!"); return 0; } else { for (i=0;i<length;i++) { if ((str[i]==' ')&&(str[i+1]==' ')) { offset=length-(i+1); printf("\noffset->%d",offset); strncpy(buf,str,offset); } offset=0; } printf("\n%s",str); printf("\n\n%s",buf); } (void)getch(); return 0; } Подскажите почему программа работает не верно. И подскажите как исправить.
|
|
|
|
|
shplint |
Понедельник, 09 Февраля 2009, 14:48
|
Участник
Профиль
Группа: Участник
Сообщений: 156
Регистрация: 22.10.2005
Из: Россия, Семенов
Пользователь №: 9791
Конфигурация
Корпус: -- Процессор: Athlon 64 (socket 754/939/AM2) Материнская плата: Epox 9npa+ Оперативная память: SUMSUNG 256Мб,+384мб Видеокарта: Ati radeon x700 Жесткий диск (винчестер): Seagate Barracuda IV 340016A Дисковод: Нет дисковода CD/DVD: TEAC DW-552G, LG-GCR8500B Модем: smart ax mt880 Сетевой адаптер: -- Звуковая плата: -- Монитор: SUMSUNG SM 753DFX Операционная система: Windows XP Прочее: --
![](style_images/1/spacer.gif)
|
Программисты, отзовитесь, ответьте на мой вопрос!!!
|
|
|
|
|
Квазимодо |
Вторник, 10 Февраля 2009, 17:45
|
Участник
Профиль
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
Конфигурация
Корпус: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
shplint, что-то не соображу, что эта программа должна делать - удалять пробелы из строк (т.е. чтобы они оставались по одному)? Если да, то ты в Код strncpy(buf,str,offset); копируешь в выходной буфер (buf) не хвост, а голову строки. А на хвост у тебя будет указывать str+i+2.
--------------------
Я долго учился на чужих ошибках, и теперь мои собственные ошибки не хуже, чем у других.
|
|
|
|
|
shplint |
Среда, 11 Февраля 2009, 11:45
|
Участник
Профиль
Группа: Участник
Сообщений: 156
Регистрация: 22.10.2005
Из: Россия, Семенов
Пользователь №: 9791
Конфигурация
Корпус: -- Процессор: Athlon 64 (socket 754/939/AM2) Материнская плата: Epox 9npa+ Оперативная память: SUMSUNG 256Мб,+384мб Видеокарта: Ati radeon x700 Жесткий диск (винчестер): Seagate Barracuda IV 340016A Дисковод: Нет дисковода CD/DVD: TEAC DW-552G, LG-GCR8500B Модем: smart ax mt880 Сетевой адаптер: -- Звуковая плата: -- Монитор: SUMSUNG SM 753DFX Операционная система: Windows XP Прочее: --
![](style_images/1/spacer.gif)
|
Вот есть строка, состоящая из слов и если какие-то слова разделены двумя пробелами программа должна удалить лишний пробел. А в буфер я вроде все прально копирую строку str со смещением, т.е. без второго пробелма оставляя только первый пробел.
|
|
|
|
|
Квазимодо |
Среда, 11 Февраля 2009, 19:24
|
Участник
Профиль
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
Конфигурация
Корпус: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
shplint, вообще-то, даже в Википедии о строковых функциях пишут: http://ru.wikipedia.org/wiki/Strncpy. По этому описанию понятно, что третий параметр у тебя - не смещение, а максимальная длина копируемой строки.
--------------------
Я долго учился на чужих ошибках, и теперь мои собственные ошибки не хуже, чем у других.
|
|
|
|
|
shplint |
Четверг, 12 Февраля 2009, 10:24
|
Участник
Профиль
Группа: Участник
Сообщений: 156
Регистрация: 22.10.2005
Из: Россия, Семенов
Пользователь №: 9791
Конфигурация
Корпус: -- Процессор: Athlon 64 (socket 754/939/AM2) Материнская плата: Epox 9npa+ Оперативная память: SUMSUNG 256Мб,+384мб Видеокарта: Ati radeon x700 Жесткий диск (винчестер): Seagate Barracuda IV 340016A Дисковод: Нет дисковода CD/DVD: TEAC DW-552G, LG-GCR8500B Модем: smart ax mt880 Сетевой адаптер: -- Звуковая плата: -- Монитор: SUMSUNG SM 753DFX Операционная система: Windows XP Прочее: --
![](style_images/1/spacer.gif)
|
Тьфу ты, ну да я копирую в буфер число символов без лишнего пробела, вроде так ну или по крайне мере так задумал. Короч, че мне надо сделать чтобы прога работала корректно?
|
|
|
|
|
Квазимодо |
Четверг, 12 Февраля 2009, 15:50
|
Участник
Профиль
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
Конфигурация
Корпус: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Хорошо, немного поправим этот if, в котором все крутится: Код if(length>49) { printf("\nERROR!"); return 0; } else { strncpy(buf,str,49); int j=0; for (i=0;i<length;i++) { if ((str[i]==' ')&&(str[i+1]==' ')) { offset=length-(i+1); if (i==0) {j++; offset--;}; printf("\noffset->%d",offset); strncpy(buf+i+1-j,str+i+2,offset); j++; } offset=0; }
(переменная j подсчитывает количество обнаруженных двойных пробелов). Ты просто начало буфера каждый раз затираешь. P.S. В следующий раз, когда пришлешь программу, пожалуйста, выделяй код тегом - тут же кнопка "Код" есть. А то воспринимается как-то не очень.
--------------------
Я долго учился на чужих ошибках, и теперь мои собственные ошибки не хуже, чем у других.
|
|
|
|
|
shplint |
Четверг, 12 Февраля 2009, 22:25
|
Участник
Профиль
Группа: Участник
Сообщений: 156
Регистрация: 22.10.2005
Из: Россия, Семенов
Пользователь №: 9791
Конфигурация
Корпус: -- Процессор: Athlon 64 (socket 754/939/AM2) Материнская плата: Epox 9npa+ Оперативная память: SUMSUNG 256Мб,+384мб Видеокарта: Ati radeon x700 Жесткий диск (винчестер): Seagate Barracuda IV 340016A Дисковод: Нет дисковода CD/DVD: TEAC DW-552G, LG-GCR8500B Модем: smart ax mt880 Сетевой адаптер: -- Звуковая плата: -- Монитор: SUMSUNG SM 753DFX Операционная система: Windows XP Прочее: --
![](style_images/1/spacer.gif)
|
Пасибо большое
|
|
|
|
|
|
2 чел. читают эту тему (2 Гостей и 0 Скрытых Пользователей)
|
0 Пользователей:
|
|
© Copyright by WinCity.Ru 2001 - 2008 | Обратная связьУслуги веб-хостинга предоставлены компанией MTW.RU
|
|