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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2015, 23:49   #1
Dari8093
 
Регистрация: 14.11.2015
Сообщений: 7
По умолчанию В алфавитно-цифровой строке удвоить каждую цифру.

Задание: В алфавитно-цифровой строке удвоить каждую цифру.
Выводит только буквы, не знаю в чем ошибка, помогите...
Код:
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    char digit[] = "123tg56dfe89";
    cout << "Dana stroka: " << digit << endl;
    int n = strlen(digit);
    int i;
    for (i = 0; i < n; i++)
    {
        if (isdigit(digit[i])) //тут как бы должна быть проверка является ли элемент digit цифрой
        digit[i] *= 2;  //цифра удваивается
    }
    for (i = 0; i < n; i++)
    {
        cout << digit[i];
    }
    cout << endl;
    system("pause");
    return 0;
}
Dari8093 вне форума Ответить с цитированием
Старый 18.12.2015, 10:02   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 digit[i] *= 2;  //цифра удваивается
так нельзя.
в строке у Вас КОДЫ символов. Удвоением КОДА вы получаете какой-то символ, но совсем не удвоенную цифру.
Это раз.
а второе, при удвоении цифр от 5 и выше, вместо одной цифры в строке будет ДВЕ. Т.е. нужно либо писать всё в новую строку (рекомендую), либо производить в массив символов вставку нового значения со сдвигом остальных.

идея понятна?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2015, 10:04   #3
Dari8093
 
Регистрация: 14.11.2015
Сообщений: 7
По умолчанию

идея понятная, но как это сделать?
Dari8093 вне форума Ответить с цитированием
Старый 18.12.2015, 10:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Переписывать в новую строку конечно же )
Код:
	char s[255]="123tg56dfe89",a[255]={0},*p=&a[0];
	int i,k;
	for(i=0;s[i];i++){
		if(s[i]>='0' && s[i]<='9'){
			k=(s[i]-'0'); k*=2;
			sprintf(p,"%d",k);
			if(k>9) p+=2; else p++;
		} else {*p++=s[i];}
	}
	printf(a); getchar();
	return 0;
Годится финт ушами?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2015, 10:31   #5
Dari8093
 
Регистрация: 14.11.2015
Сообщений: 7
По умолчанию

а по вашему коду вообще ничего не выводиться((
просто вылезает пустая консоль, ввожу не ввожу что-то нажимаю enter консоль закрывается...
Dari8093 вне форума Ответить с цитированием
Старый 18.12.2015, 10:41   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если я правильно понял задание (и Вы ничего не напутали с удвоением цифр)
тогда рассмотрите такой код:
Код:
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;

int main() {
{
    char digit[] = "723tg156dfe89";
    cout << "Dana stroka: " << digit << endl;
    int n = strlen(digit);
    string newdd = "abc";
    int i;
    int k=0;
    for (i = 0; i < n; i++)
    {
        if (isdigit(digit[i])) //проверка является ли элемент digit цифрой
          if (digit[i]>'4') k++;
    }
    
    char *newstr = new char[n+k];
    k=0;
    for (i = 0; i < n; i++)
    {
        if (isdigit(digit[i])) {
            if (digit[i]<'5') 
		    	newstr[k++] = ((digit[i]-'0')*2)+'0';
		    else {
		    	newstr[k++] = '1';
		    	newstr[k++] = ((digit[i]-'0')*2-10)+'0';
		    }
        }
        else
	    	newstr[k++] = digit[i];
    }
    cout << "Novay ctroka: "<< newstr << endl;
    
    delete [] newstr; // очистка памяти
    system("pause");
    return 0;
}
}

Последний раз редактировалось Serge_Bliznykov; 18.12.2015 в 10:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2015, 10:55   #7
Dari8093
 
Регистрация: 14.11.2015
Сообщений: 7
По умолчанию

Все работает, выводит все хорошо, спасибо огромное))
только там какие-то лишние символы выводятся, как это убрать??)
Изображения
Тип файла: png 12312.png (5.3 Кб, 71 просмотров)
Dari8093 вне форума Ответить с цитированием
Старый 18.12.2015, 11:02   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если так?
Код:
...
    int newlen = n+k;
    char *newstr = new char[newlen];
    k=0;
    for (i = 0; i < n; i++)
    {
        if (isdigit(digit[i])) {
            if (digit[i]<'5') 
		    	newstr[k++] = ((digit[i]-'0')*2)+'0';
		    else {
		    	newstr[k++] = '1';
		    	newstr[k++] = ((digit[i]-'0')*2-10)+'0';
		    }
        }
        else
	    	newstr[k++] = digit[i];
    }

    // вывод результата
    cout << "Novay ctroka: ";
    for (i = 0; i < newlen; i++)
    {
        cout << newstr[i];
    }
    cout << endl;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2015, 11:18   #9
Dari8093
 
Регистрация: 14.11.2015
Сообщений: 7
По умолчанию

а вот так все нормально, ничего лишнего. Спасибо вам огромное!!)))
Dari8093 вне форума Ответить с цитированием
Старый 18.12.2015, 12:39   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а по вашему коду вообще ничего не выводиться((
Неправда. Все выводится. Проверено на VS 2010.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организовать процедуру, позволяющую записать в текстовый файл введенную с клавиатуры строку. Удвоить в данном файле каждую цифру. Deg Паскаль, Turbo Pascal, PascalABC.NET 5 18.05.2014 21:10
Free Pascal Graph и алфавитно-цифровой экран Влад144 Паскаль, Turbo Pascal, PascalABC.NET 3 14.04.2013 09:07
Задано любое слово. Разбить его на группы по три символа. Каждую из групп удвоить. (TurboPascal) Longint20 Паскаль, Turbo Pascal, PascalABC.NET 0 23.05.2012 11:36
Дано целое число. Уменьшить каждую цифру этого числа на 1. Makcumqa Помощь студентам 2 18.03.2010 08:09