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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2022, 06:54   #1
ruivit
Пользователь
 
Регистрация: 14.09.2022
Сообщений: 24
По умолчанию немогу понять почему проподает значения массива

В общем дела такое. Пишу функцию которая преобразует из всяких с.с. в десятичную систему. Вроде как получается но с двоиччной троичной и прочими всё работает. Но вот напоролся на 16 систему где нужно преобразовывать буквы в цифры. И тут началось, уже весь себе мозг сломал как та как выходит что до начала цикла цифра есть после нету.
Код:
// преоброзователь из различных систем в десятичную
int pluto(char a[],int k){
	long int sa=0; 

	for(int i = 0; a[i] > 95; i++) // ваопрос к значению 10
	{ 
	    // определяем наличие букв и цифр
 		if(isalpha(a[i])){
 			
			// находим буквы
			a[i] = goha(a[i]);
					
		}
	cout << a << " cifir 1 ";	// Тут цифира преоброзованая из буквы в цифру есть
	}	
	for (int i=0; i<strlen(a); i++)
		{
    		sa = sa*k + (a[i]-'0');	
		}
	cout << endl;
		cout  << "result " << sa << endl; // а тут почемуто ноль
}
Для полного понимания что там происходит вот программный код целиком.
Код:
#include <iostream>
#include <string>
#include <iostream>
using std::stringstream;
using namespace std;
// функция определяет буква это или цифра
unsigned char IsStringOK(char * str)
{
    unsigned char i = 0;
    for (i = 0; i< strlen(str);i++)
        if (!isalpha(str[i]))
            return 0;
    return 1;
}
// формирует буквы в место чисел
char laguna(float n){	
	char as;
	string s;	
	// формируем массив букв и цифр
	s[10] = 'a';
	s[11] = 'b';
	s[12] = 'c';
	s[13] = 'd';
	s[14] = 'e';
	s[15] = 'f';
	s[16] = 'g';
	s[17] = 'h';
	s[18] = 'i';
	s[19] = 'j';
	s[20] = 'k';
	s[21] = 'l';
	s[22] = 'm';
	s[23] = 'n';
	s[24] = 'o';
	s[25] = 'p';
	s[26] = 'q';
	s[27] = 'r';
	s[28] = 's';
	s[29] = 't';
	s[30] = 'u';
	s[31] = 'v';
	s[32] = 'w';
	s[33] = 'x';
	s[34] = 'y';
	s[35] = 'z';
 	as = s[n];
	return(as);
}
// функция приобразует буквы в цифры
char goha( char a){	
	int i = 0;
    char fox;
	while(i < 36){
	i++;	
	if(laguna(i) == a){
	//	cout << i;
	printf("%i",i,fox); // преобразую из float в char	
	return (fox);				
	}  
}	
}
// преоброзователь из различных систем в десятичную
int pluto(char a[],int k){
	long int sa=0; 

	for(int i = 0; a[i] > 95; i++) // ваопрос к значению 10
	{ 
	    // определяем наличие букв и цифр
 		if(isalpha(a[i])){
 			
			// находим буквы
			a[i] = goha(a[i]);
					
		}
	cout << a << " cifir 1 ";	// Тут цифира преоброзованая из буквы в цифру есть
	}	
	for (int i=0; i<strlen(a); i++)
		{
    		sa = sa*k + (a[i]-'0');	
		}
	cout << endl;
		cout  << "result " << sa << endl; // а тут почемуто ноль
}


int main(int argc, char** argv) {
	int k;
	float n;
	char s;
 	 char a[100];
	 cin >> a;
	 cin >> k;
	pluto(a,k);
 	 // cout << goha(s);
	return 0;
}
ruivit вне форума Ответить с цитированием
Старый 10.10.2022, 07:46   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 961
По умолчанию

лютое собрание сочинений "как делать нельзя"
Алексей1153 вне форума Ответить с цитированием
Старый 10.10.2022, 08:07   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 961
По умолчанию

предлагаю такой вариант. Тестировал мало, могут быть ошибки

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

int convert_to_dec(const std::string_view str, const int base)
{
    int result{};
    if(base<=0 || base>100)
    {
        return result;//todo - обработать ошибку
    }
    
    for(auto it=str.rbegin(); it!=str.rend(); it++)
    {
        result*=base;
        const auto digit=*it;
        
        int digit_value{};
        if(digit>='0' && digit<='9')
        {
            digit_value=digit-'0';
        }
        else if(digit>='a' && digit<='z')
        {
            digit_value=digit-'a'+10;
        }
        else if(digit>='A' && digit<='Z')
        {
            digit_value=digit-'A'+10;
        }
        else
        {
            return result;//todo - обработать ошибку
        }
        
        if(digit_value>=base)
        {
            return result;//todo - обработать ошибку
        }
        
        //todo - проследить за переполнением
        result+=digit_value;
    }
    
    return result;
}

int main(int argc, char** argv)
{
    std::cout<<"enter value: ";
    std::string a; std::getline(std::cin,a);
	
	std::cout<<"enter the base: ";
	int k{}; std::cin >> k;
	
	std::cout<<convert_to_dec(a,k);
	
	return 0;
}
Алексей1153 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
немогу понять алгоритм КРИЖ Помощь студентам 2 18.11.2012 12:19
не могу понять почему не правильно выводятся числа массива Nikitos_ Паскаль, Turbo Pascal, PascalABC.NET 7 31.05.2012 11:52
Немогу понять dyachenco Общие вопросы C/C++ 0 14.10.2011 17:08
Немогу понять задание Mage Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 31.03.2010 19:18
Немогу понять,почему Microsoft Visual Studio 2005 (C++) выдает ошибки? FanEurovision Visual C++ 3 18.05.2009 20:06