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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2017, 19:35   #1
Натан Эршенгорен
Новичок
Джуниор
 
Регистрация: 10.01.2017
Сообщений: 3
По умолчанию Написать функцию, которая будет удалять из строки лишние пробелы, оставляя только один пробел

На собеседование дали задачи и попросили исполнить на С. Я справился со всеми кроме одной. До сих пор не могу понять как с ней быть. Помогите прошу, все мозги уже испортил, ничего не могу придумать.

Условие:
Написать функцию, которая будет удалять из строки лишние пробелы, оставляя только один пробел. Выводить количество удаленных пробелов. Написать код с использованием одного цикла и не используя дополнительных массивов. void srtSort(char str[])

Пример:
Оригинал: _ _ a _ _ _ b c _ _ g_ _ /0.
После использования написанной функции: _ a _ b c _ g_ /0
Удалено 5 пробелов.
Натан Эршенгорен вне форума Ответить с цитированием
Старый 10.01.2017, 20:54   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
#include <stdio.h>

int str_sort(char str[])
{
	int skip = 0;
	int skipped = 0;
	char *cur, *new_cur;

	for (cur = new_cur = str; *cur; cur++) {
		if (*cur == ' ') {
			if (skip) {
				++skipped;
				continue;
			} else {
				skip = 1;
			}
		} else {
			skip = 0;
		}
		*new_cur++ = *cur;
	}

	*new_cur = 0;
	return skipped;
}

int main()
{
	char str[128];

	fgets(str, sizeof(str), stdin);
	printf("spaces deleted: %d\n", str_sort(str));
	puts(str);

	return 0;
}
отдашь первую зарплату
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 10.01.2017, 21:45   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

кажись мы больше его не увидим. плакали мои денежки
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 10.01.2017, 22:12   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
плакали мои денежки
Какие денежки? Тут и "спасибо" не всегда говорят...
Вадим Мошев вне форума Ответить с цитированием
Старый 10.01.2017, 23:43   #5
Натан Эршенгорен
Новичок
Джуниор
 
Регистрация: 10.01.2017
Сообщений: 3
По умолчанию

А я скажу!) Спасибо!)
Не думал даже про указатели.
И про зарплату еще не знаю, не сказали ответа.
Но есть еще один вопрос.
Можно ли сделать эту функцию используя условие конца строки.

Например:
while (str[i]!='\0')
{
тело цикла
}
Натан Эршенгорен вне форума Ответить с цитированием
Старый 11.01.2017, 13:03   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Можно ли сделать эту функцию используя условие конца строки.
она и так использует условие конца строки

Цитата:
Не думал даже про указатели.
можно и без указателей. с указателями код проще.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 11.01.2017 в 13:41.
pproger вне форума Ответить с цитированием
Старый 11.01.2017, 16:39   #7
Натан Эршенгорен
Новичок
Джуниор
 
Регистрация: 10.01.2017
Сообщений: 3
По умолчанию

Спасибо!
Натан Эршенгорен вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая добавляет к каждому найденному во введенной фразе слову символ «а». Удалите все лишние пробелы между с Анастасия35 Паскаль, Turbo Pascal, PascalABC.NET 2 21.01.2016 11:04
Удалять лишние пробелы в строке без использования регулярного выражения Alex.s1989 Помощь студентам 3 04.10.2013 22:09
написать функцию, которая по элементу массива будет определять его номер. vereney Паскаль, Turbo Pascal, PascalABC.NET 11 07.03.2011 14:22
удалять лишние пробелы из строки eduard17 Помощь студентам 4 19.02.2010 20:42