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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 19:10   #1
mansp
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 52
По умолчанию функция для работы со строкой

столкнулся с проблемой когда писал функцию для роботы со строкой
Код:

#define m 20
#define n 20

char func29(char*str)
{	
	char strbuff [m];
	strbuff [0]='<';
	int i = 0, k=1;
	for (;str[i]!=0 ; i++, k++)
	{
		if (str[i]!=' ')
		strbuff [k] = str [i];
		if (str[i]==' ')
		{
			strbuff [k]='>';
			k++;
			strbuff [k]=' ';
			k++;
			strbuff [k]='<';	
		}

	}
	for (int i2=0; i!=m; i++)
	{
		str[i2]=strbuff[i];
	}
	puts(str);
	return 0;

}
в идеале функция должна вставлять в строку знаки '<','>' в начале и в конце каждого слова тоесть строка должна виводитса вод так:
<слово> <слово> <слово> <слово> <слово>

но строка выводитса такой как она есть ,да и последний > не вставляет

как это правильно сделать?
mansp вне форума Ответить с цитированием
Старый 21.11.2010, 19:29   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

for (int i2=0; i!=m; i++)
{
str[i2]=strbuff[i];
}
В последнем цикле у Вас ошибка.
Надо записать:
for (int i2=0; i2!=m; i2++)
{
str[i2]=strbuff[i2];
}
Вы объявили локальную переменную цикла for, а инкрементируете локальную i функции.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.11.2010, 19:52   #3
mansp
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 52
По умолчанию

спасибо.
не знаю как сделать так что бы в конце последнего слова записывал знак >
mansp вне форума Ответить с цитированием
Старый 21.11.2010, 22:28   #4
nowaalex
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 59
По умолчанию

Код:
#include <iostream>
#include <cstring>

#define MAX 100

int main()
{
    char * transform( char * string );
    std::cout<<transform( "word1 word2 word3" )<<std::endl;
    return 0;
}

char * transform( char * string )
{
    static char result[ MAX ];
    char * resultPtr = result;
    bool isOpened = false;

    for( ;; )
    {
        if( !isOpened )
            switch( *string )
            {
            case ' ':
                *string++;
                break;
            case 0:
                return "";
            default:
                *resultPtr = '<';
                *resultPtr++;
                isOpened = true;
                break;
            }
        else
            switch( *string )
            {
            case ' ':
                strcat( resultPtr, "> " );
                resultPtr += 2;
                isOpened = false;
                break;

            case 0:
                *resultPtr = '>';
                return result;

            default:
                *resultPtr = *string;
                *resultPtr++;
                *string++;
                break;
            }
    }
}

Последний раз редактировалось nowaalex; 21.11.2010 в 22:38.
nowaalex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция для char.С/С++ Roker Помощь студентам 0 03.05.2010 08:54
Библиотека для WINAPI для работы с ORACL Golovastik SQL, базы данных 2 02.03.2010 19:42
Модули для работы с системой (для Delphi) Terran Компоненты Delphi 9 07.01.2010 02:54
Для облегчения работы с TFS - приложение для работы над дефектами и задачами Аякс Софт 1 18.03.2009 11:43