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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2011, 21:03   #1
Nubar
Новичок
Джуниор
 
Регистрация: 13.01.2011
Сообщений: 1
Смущение Функция работы со строками С

Вот готовая программа

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define mysql_db_server_len 30
#define mysql_db_server_db_user_len 20
#define mysql_db_server_db_len 25
#define mysql_db_server_db_passw_len 20

typedef struct {
char mysql_db_server[mysql_db_server_len];
char mysql_db_server_db_user[mysql_db_server_db_user_len];
char mysql_db_server_db[mysql_db_server_db_len];
char mysql_db_server_db_passw[mysql_db_server_db_passw_len];
unsigned int mysql_port;
} CONFIG_STRUCT;

int getparam(char *confobj, char *paramname, char *copyvar){
printf("hi!\n%s\n",confobj);
printf("hi2!%s\n",copyvar);
}

int main(){
char *conf_inmemory="mysql_db_server=localhost;\nmysql_db_usr=root;\nmysql_db=mydatabase;\nmysql_db_passw=qNer!!@0;\nmysql_port=0;\n";
CONFIG_STRUCT mystruct; 

 mystruct.mysql_db_server[0]='A';
 mystruct.mysql_db_server[1]='B';
getparam(conf_inmemory, "mysql_db_server", mystruct.mysql_db_server);



printf("mysql_db_server=%s\n", mystruct.mysql_db_server);
printf("mysql_db_server_db_user=%s\n", mystruct.mysql_db_server_db_user);
printf("mysql_db_server_db=%s\n", mystruct.mysql_db_server_db);
printf("mysql_db_server_db_passw=%s\n", mystruct.mysql_db_server_db_passw);
printf("mysql_port=%d\n", mystruct.mysql_port);


}

Нужно написать функцию, которая будет искать значение параметров, тоесть к примеру mysql_db_server - параметр, localhost - значение. и копировать значение в copyvar. Пол дня сижу над этим, ну никак не могу решить.
Заранее спасибо

Последний раз редактировалось Nubar; 13.01.2011 в 22:43.
Nubar вне форума Ответить с цитированием
Старый 14.01.2011, 19:59   #2
like-nix
Форумчанин
 
Регистрация: 09.11.2009
Сообщений: 104
По умолчанию

По смотрите тут http://www.boost.org/doc/libs/1_45_0...m_options.html

вот простой пример как обработать опцию help без параметров и compression с одним целым

Код:
// Copyright Vladimir Prus 2002-2004.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)

/* The simplest usage of the library.
 */

#include <boost/program_options.hpp>
namespace po = boost::program_options;

#include <iostream>
#include <iterator>
using namespace std;

int main(int ac, char* av[])
{
    try {

        po::options_description desc("Allowed options");
        desc.add_options()
            ("help", "produce help message")
            ("compression", po::value<int>(), "set compression level")
        ;

        po::variables_map vm;        
        po::store(po::parse_command_line(ac, av, desc), vm);
        po::notify(vm);    

        if (vm.count("help")) {
            cout << desc << "\n";
            return 1;
        }

        if (vm.count("compression")) {
            cout << "Compression level was set to " 
                 << vm["compression"].as<int>() << ".\n";
        } else {
            cout << "Compression level was not set.\n";
        }
    }
    catch(exception& e) {
        cerr << "error: " << e.what() << "\n";
        return 1;
    }
    catch(...) {
        cerr << "Exception of unknown type!\n";
    }

    return 0;
}
like-nix вне форума Ответить с цитированием
Старый 14.01.2011, 20:04   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2like-nix
он на С пишет, на кой ему твой boost?
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 вне форума Ответить с цитированием
Старый 14.01.2011, 23:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А так:
Код:
// Параметр из строки.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <malloc.h>
char *Параметр(char *ЧтоИскать, char *ГдеИскать){
	char *s;
	for(int i=0;ГдеИскать[i];i++){
		bool ok=true;
		int j=0;
		for(j=0;ЧтоИскать[j];j++){
			if(ЧтоИскать[j]!=ГдеИскать[i+j]){ok=false;break;}
		}
		if (ok){
			int c=0;for(int k=j+i;(ГдеИскать[k])&&(ГдеИскать[k]!=';');k++,c++);
			s=(char*)malloc(c+1);
			int e=0;
			for(int k=j+i+1;(ГдеИскать[k])&&(ГдеИскать[k]!=';');k++,e++) 
				s[e]=ГдеИскать[k];
			s[e]=0;
			return s;
		}
	}
	return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	char *conf_inmemory="mysql_db_server=localhost;mysql_db_usr=root;\nmysql_db=mydatabase;\nmysql_db_passw=qNer!!@0;\nmysql_port=0;\n";
	char *s=Параметр("mysql_db_usr",conf_inmemory);
	printf("%s",s);
	getchar();
	return 0;
}
Сойдет? Вроде не плюсы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции работы со строками JeyKip Общие вопросы C/C++ 4 03.10.2009 17:55
Упрощение работы со строками RNT Общие вопросы C/C++ 4 04.08.2009 13:08
Функции и процедуры работы со строками Маськ@ Паскаль, Turbo Pascal, PascalABC.NET 2 15.04.2009 20:10