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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2016, 10:26   #1
КсенияФокина
Новичок
Джуниор
 
Регистрация: 15.06.2016
Сообщений: 6
По умолчанию Работа со строками.

Доброго дня! Задача-Напишите программу которая получает от пользователя строки и удаляет лишние пробелы. Сказано преподавателем сделать так-по циклу проверять, если элемент массива пробел, то увеличивать перемеренную на один. Как только встречается символ, начинать цикл от переменой, и проверять условие-если символ не пробел то присваивать j-ому элементу нового массива i-ый элемент исходного. и так продолжать. Вообще мне необходимо сделать эту программу для общего случая т.е. сколько бы символов не вводилось, но я решила начать с легкого и попробовать сначала для пары слов. Программа работает, но когда я хочу взглянуть на результат строчками cout и выводом массивов на экран показывает квадратики. В чем может быть проблема? Заранее спасибо за помощь и ответы!
Код:
#include <iostream.h>
int main ()
{
	char Massiv[100],Vivod[100],Vivod1[100];
	int L,b,S,j,c;
	cout<<"vvedite simvoli\n";
	cin.get (Massiv,101);
		for (int i=0; Massiv[i]!='\0';i++)
		cout<<Massiv[i];
		cout<<"\n";
		L=0;
		for (i=0;i==' ';i++)
			L=L+1;
		for(i=L;i!=' ';i++)
		for (j=0;j!='\0';j++);
			Vivod[j]=Massiv[i];
		b=i;
		S=0;
		for (i=0;i==' ';i++)
			S=S+1;
		for (i=b+S;i!=' ';i++)
			Vivod1[i-(b+S)]=Massiv[i]; 
		c=i;
			cout<<Vivod[i]<<"\n";
		cout<<Vivod1[i]<<"\n";
 return 0;
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор


Безымянный.jpg

Последний раз редактировалось Serge_Bliznykov; 17.06.2016 в 11:22.
КсенияФокина вне форума Ответить с цитированием
Старый 18.06.2016, 14:59   #2
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Наверное, нужно начать с определения "лишние пробелы в строке".
Есть несколько учебных заданий - лидирующие пробелы, заключительные пробелы, дублирующиеся пробелы между словами.
Так бы я решил для дублирующихся пробелов между словами.
Код:
#include <iostream>
using namespace std;
int main ()
{
    char Massiv[]="Fokina Ksenia   and  more   more spaces", Vivod[100];
    char * Src, * Dst;
    int SpaceCharPrevious;
    //cout<<"vvedite simvoli\n";
    //cin.get (Massiv,101);
    cout<<Massiv<<"\n";

    SpaceCharPrevious=0;
    Src=Massiv;
    Dst=Vivod;
    while(*Src)
    {
        if((*Src != ' ') || (!SpaceCharPrevious))
        {
            *Dst=*Src;
            SpaceCharPrevious=(*Src==' ');
            Dst++;
        }
        Src++;
    }
    *Dst=0;

    cout<<Massiv<<"\n";
    cout<<Vivod<<"\n";
    return 0;
}
Исключил ввод на время отладки - я ведь тоже плохо знаю этот язык. Во всём решении сквозит Pascal.

Если нужно удалить лидирующие пробелы - то нужно просто сдвигать указатель Src++ не трогая Dst до тех пор, пока *Src==' '.

Если вам нужно было решать через индексы, то просто замените *Src на Massiv[Src], Src=Massiv на Src=0 и аналогично для Dst.

Последний раз редактировалось FPaul; 18.06.2016 в 15:03.
FPaul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками vbn1 Общие вопросы C/C++ 0 20.12.2014 07:52
Работа со строками Nickolai47 C# (си шарп) 6 23.04.2014 17:35
Работа со строками Casillas1 Помощь студентам 2 29.05.2013 17:11
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
[С++]работа со строками Федор Помощь студентам 6 23.12.2007 12:35