Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2012, 22:35   #1
Йод
Новичок
Джуниор
 
Регистрация: 11.12.2012
Сообщений: 1
По умолчанию компилятор выдает ошибку (C++)

В последовательности из 10 пятибуквенных слов найти и поменять местами пару слов, у которых первые три буквы одного совпадают с последними тремя буквами другого.
Код:
#include <stdio.h>
#include <string.h>
char* find(char* str, const char c)
{
char* pos;
for(pos = str; *pos != '\0'; ++pos)
{
if(*pos == c)
{
return pos;
}
}
 return pos;
}
void removeFromStr(char* first, char* last)
{
for( ; *first != *last; ++first, ++last);
}
int main()
{
while(1)
{
char* first, *last;
printf("Enter your string: ");
char str[1000];
scanf("%s",str);
for(first = find(str,'('), last = find(first,')');
(*first != '\0') && (*last != '\0');
first = find(str, '('), last = find(first, ')') )
removeFromStr(first, last + 1);
printf("%s\n", str);
}

Последний раз редактировалось Stilet; 11.12.2012 в 22:48.
Йод вне форума Ответить с цитированием
Старый 12.12.2012, 01:20   #2
Iva-sist29
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

что значит "(*first != '\0') && (*last != '\0');" ?
Iva-sist29 вне форума Ответить с цитированием
Старый 12.12.2012, 09:31   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Это значит "Пока эти оба указателя не укажут на ячейку с нулем".
Я бы писал так:
Код:
for(
 first = find(str,'('), last = find(first,')');
 *first && *last;
 first = find(str, '('), last = find(first, ')') 
)
Цитата:
Йод
А ты не хочешь свою задачу переделать на разделение строки на массив слов?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2012, 15:28   #4
Iva-sist29
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

Не правильно начал... Первый вопрос - какую ошибку выдаёт компилятор? Указывает на сторку или нет?
Iva-sist29 вне форума Ответить с цитированием
Старый 12.12.2012, 15:43   #5
Iva-sist29
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

...и для while (1), в главной функции, не хватает закрывающей скобки, это только здесь или в оригинале тоже?
Iva-sist29 вне форума Ответить с цитированием
Старый 12.12.2012, 16:19   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
для while (1), в главной функции, не хватает закрывающей скобки
Откуда такие выводы? Смотри:
Код:
void removeFromStr(char* first, char* last)
{
for( ; *first != *last; ++first, ++last);
}
int main()
{
while(1) {
   char* first, *last; 
   printf("Enter your string: ");
   char str[1000];
   scanf("%s",str);
   for(first = find(str,'('), last = find(first,')');(*first != '\0') && (*last != '\0');first = find(str, '('), last = find(first, ')') )
       removeFromStr(first, last + 1);
   printf("%s\n", str);
}
Все там хватает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2012, 17:44   #7
Iva-sist29
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию

Сам смотри! Ладно, пусть для цикла всё хватает, а где конец функции main?! И можете сразу исправить в removeFromStr: for( ; *first != *last; ++first, ++last) *first = *last;
У меня уже работает.
Iva-sist29 вне форума Ответить с цитированием
Старый 12.12.2012, 18:29   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
а где конец функции main?
Согласен, однако я думал автор там что-то после предполагал дописывать, и поэтому не показал весь код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2013, 12:42   #9
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Мне интересно:
1. Почему нельзя было использовать библиотечную функцию strchr для нахождения символа в строке.
2. Не много не понятен принцип удаления. А не понятен тем что у тебя и first и last увеличиваются и по этому они все время не будут равны друг другу.
Если что то напутал извиняйте.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выдает ошибку (C++) Carter Помощь студентам 2 10.03.2012 17:37
выдает ошибку(( aanaaa Общие вопросы C/C++ 3 26.05.2011 07:13
Выдает ошибку( И.А.А. Общие вопросы C/C++ 1 21.05.2010 19:10
выдает ошибку! maksim_serg Microsoft Office Word 3 20.04.2010 04:19
Почему в ответе компилятор выдает -0 (минус 0)? Igorec Помощь студентам 0 01.04.2010 08:53