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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 16:26   #1
Злой пёс
Новичок
Джуниор
 
Регистрация: 02.11.2009
Сообщений: 1
По умолчанию Символьный массив

Задание:
Написать функцию, которая для заданного в качестве параметра массива типа char возвращает сумму кодов всех его элементов и заменяет все вхождения символа «#» на букву А. В главной программе определить суммарное значение кодов символа «#» .

Исправьте пожалуйста и объясните именно так чтобы разобраться.


Код:
#include "stdafx.h"                         

#include <stdio.h>

#include <iostream.h>
int s,i;

void a(char m1[6])
{
		for(i=0;i<6;i++)
			if(m1[i]='#')
				'#'='A';
				
			s=0;
				s=s+m1[i];
}
	

int main()
char m1[6];
{ 
 
        cout<<"Vvtdite elementi massiva:"<<endl;
        {
		for(i=0;i<6;i++)
			
                                cout<<"m1["<<i<<"]=";
                                cin>>m1[i];
								}

		cout<<endl;
                cout<<"Nach massiv:"<<endl;
                {
				for(i=0;i<6;i++)
					cout<<m1[i]<<"  ";
                        cout<<endl;
                }
				a(m1)
				s=s+m1[i]; 
        cout<<"result summi:"<<endl;
        for(i=0;i<6;i++)
        {
                cout<<" "<<summ[i];
        }
        cout<<endl;
        return 0;
}
Злой пёс вне форума Ответить с цитированием
Старый 02.11.2009, 18:55   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int change(char *str)
{
	int sum=0;
	for(int i=0;str[i]!='\0';i++)
	{
		sum+=(int)str[i];
		if(str[i]=='#')
			str[i]='A';
	}
	return sum;
}

void main()
{
	char str[30];
	cout<<"Vvedite stroku\n";
	cin.getline(str,30);
	cout<<"\n\nStroka do preobrazovaniya\n"<<str;
	int s=change(str);
	cout<<"\n\nStroka posle preobrazovaniya\n"<<str;
	cout<<"\nSumma codov = "<<s;
	_getch();
}

Последний раз редактировалось counter; 03.11.2009 в 18:42.
counter вне форума Ответить с цитированием
Старый 02.11.2009, 21:26   #3
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

а ваша строчка,counter, sum+=(int)str[i] будет неверно работать =)
правильно вот так sum+=(BYTE)str[i]
lennon вне форума Ответить с цитированием
Старый 02.11.2009, 21:29   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от lennon Посмотреть сообщение
а ваша строчка,counter, sum+=(int)str[i] будет неверно работать =)
правильно вот так sum+=(BYTE)str[i]
Тогда следует упомянуть, что для BYTE ещё нужно подключить Windows.h ) ну или хотя бы написать
Код:
typedef unsigned char BYTE;
netrino вне форума Ответить с цитированием
Старый 03.11.2009, 17:49   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от lennon Посмотреть сообщение
а ваша строчка,counter, sum+=(int)str[i] будет неверно работать =)
правильно вот так sum+=(BYTE)str[i]
почему? расскажи, плз...
counter вне форума Ответить с цитированием
Старый 03.11.2009, 18:12   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
почему? расскажи, плз...
Потому что в строке может попасться символ, код которого больше 127-ми, из-за чего он будет восприниматься как отрицательный и сумма кодов будет неправильная ) Чтобы всё норм было необходимо делать приведение к беззнаковому типу

...

Кстати, глянул на Ваш код, у Вас там либо ещё одна ошибка, либо очень жёстко-хакерский способ задания условия выхода из цикла ))
Цитата:
Сообщение от counter
Код:
for(int i=0;i<str[i]!='\0';i++)
При всё тех же символах, что больше 127 цикл ни разу не выполнится.
i < str[i] != '\0' вероятнее всего должно было быть просто str[i] != '\0' )

Последний раз редактировалось netrino; 03.11.2009 в 18:37.
netrino вне форума Ответить с цитированием
Старый 03.11.2009, 18:41   #7
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Потому что в строке может попасться символ, код которого больше 127-ми, ...
спасибо, а я и не заметил...

Цитата:
При всё тех же символах, что больше 127 цикл ни разу не выполнится.
i < str[i] != '\0' вероятнее всего должно было быть просто str[i] != '\0' )
да я тоже заметил, это опечатка
counter вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьный тип Patrick Паскаль, Turbo Pascal, PascalABC.NET 1 24.09.2009 13:19
Задача на символьный массив Archiserafim Паскаль, Turbo Pascal, PascalABC.NET 3 12.05.2009 21:52
Символьный тип.Паскаль. Karabas Помощь студентам 7 25.11.2008 18:16
Символьный массив Nanny Общие вопросы C/C++ 5 20.04.2008 22:44
Символьный массив и double dima Общие вопросы C/C++ 5 15.12.2006 03:52