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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2012, 19:41   #1
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию с++ функция заменяет слова цифрами

Код:
/*вводим слово 
символьный массив передается в функцию.
она должна заменить соответствующие буквы на соответствующие цифры
соответствие это равно набору на телефоне методом т9
передав слово "мама" функция должна возвращать число 5151
но у меня возвращает совсем не то, что хотелось бы, подскажите в чем ошибка?
--
зы
наверняка не рационально сделал, но как смог :)
*/


#include <iostream>
using namespace std;
#include "Rus.h"
#include "math.h"
long text(char *c);
int main(void)

long text(char *c)
{
	int *t, i, len;
	t=new int[];
	len=sizeof(c);
	long ts=1;
	for (i=0; i<len; i++) t[i]=1;
	for (i=0; i<len; i++)
	{
		if (c[i]=='a') t[i]=1;
		if (c[i]=='б') t[i]=1;
		if (c[i]=='в') t[i]=1;
		if (c[i]=='г') t[i]=1;
		if (c[i]=='д') t[i]=2;
		if (c[i]=='е') t[i]=2;
		if (c[i]=='ё') t[i]=2;
		if (c[i]=='ж') t[i]=2;
		if (c[i]=='з') t[i]=2;
		if (c[i]=='и') t[i]=4;
		if (c[i]=='й') t[i]=4;
		if (c[i]=='к') t[i]=4;
		if (c[i]=='л') t[i]=4;
		if (c[i]=='м') t[i]=5;
		if (c[i]=='н') t[i]=5;
		if (c[i]=='о') t[i]=5;
		if (c[i]=='п') t[i]=5;
		if (c[i]=='р') t[i]=6;
		if (c[i]=='с') t[i]=6;
		if (c[i]=='т') t[i]=6;
		if (c[i]=='у') t[i]=6;
		if (c[i]=='ф') t[i]=7;
		if (c[i]=='х') t[i]=7;
		if (c[i]=='ц') t[i]=7;
		if (c[i]=='ч') t[i]=7;
		if (c[i]=='ш') t[i]=8;
		if (c[i]=='щ') t[i]=8;
		if (c[i]=='ь') t[i]=8;
		if (c[i]=='ы') t[i]=8;
		if (c[i]=='ъ') t[i]=9;
		if (c[i]=='э') t[i]=9;
		if (c[i]=='ю') t[i]=9;
		if (c[i]=='я') t[i]=9;
		if (c[i]==' ') t[i]=0;

		ts+=pow(10.0,i)*t[i];

	}
	return ts;
}
Tiva вне форума Ответить с цитированием
Старый 21.01.2012, 23:06   #2
Noyabr
Пользователь
 
Регистрация: 21.01.2012
Сообщений: 14
По умолчанию

попробовал использовать подобный алгоритм для своих целей.

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

using namespace std;

int main()
{
    string c[20][20];
    int i;
    int j;
    for(i=0;i<20;i++){
    for(j=0;j<20;j++){
                      cout<<"c["<<i<<"]["<<j<<"]= \n";
                      cin>>c[i][j];
                      }
                      }
    int t[20][20];
    
    for(i=0;i<20;i++){
    for(j=0;j<20;j++){
    if (c[i][j]=='a') t[i][j]=1;
    if (c[i][j]=='b') t[i][j]=2;
	if (c[i][j]=='c') t[i][j]=3;
	if (c[i][j]=='d') t[i][j]=4;
	if (c[i][j]=='e') t[i][j]=5;
	if (c[i][j]=='f') t[i][j]=6;
	if (c[i][j]=='g') t[i][j]=7;
	if (c[i][j]=='h') t[i][j]=8;
	if (c[i][j]=='i') t[i][j]=9;
	if (c[i][j]=='j') t[i][j]=11;
	if (c[i][j]=='k') t[i][j]=12;
	if (c[i][j]=='l') t[i][j]=13;
	if (c[i][j]=='m') t[i][j]=14;
	if (c[i][j]=='n') t[i][j]=15;
	if (c[i][j]=='o') t[i][j]=16;
	if (c[i][j]=='p') t[i][j]=17;
	if (c[i][j]=='q') t[i][j]=18;
	if (c[i][j]=='r') t[i][j]=19;
	if (c[i][j]=='s') t[i][j]=21;
	if (c[i][j]=='t') t[i][j]=22;
	if (c[i][j]=='u') t[i][j]=23;
	if (c[i][j]=='v') t[i][j]=24;
	if (c[i][j]=='w') t[i][j]=25;
	if (c[i][j]=='x') t[i][j]=26;
	if (c[i][j]=='y') t[i][j]=27;
	if (c[i][j]=='z') t[i][j]=28;
	if (c[i][j]==' ') t[i][j]=29;
}
}
for(i=0;i<20;i++){
    for(j=0;j<20;j++){cout<<"t["<<i<<"]["<<j<<"]="<<t[i][j];}
}
почему-то пишет ошибку
21 C:\Dev-Cpp\mass.cpp no match for 'operator==' in 'c[i][j] == 'a''
и т.д. для всех строк
Noyabr вне форума Ответить с цитированием
Старый 21.01.2012, 23:08   #3
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

А ниче, что массив типа "string", а вы его с типом "char" сравниваете?
В C++, насколько я помню, строки пишутся в двойных кавычках, а в апострофах только символы
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 21.01.2012, 23:11   #4
Noyabr
Пользователь
 
Регистрация: 21.01.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
А ниче, что массив типа "string", а вы его с типом "char" сравниваете?
В C++, насколько я помню, строки пишутся в двойных кавычках, а в апострофах только символы
а, точно. тупанул
Noyabr вне форума Ответить с цитированием
Старый 21.01.2012, 23:55   #5
valterg
 
Регистрация: 18.01.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Tiva Посмотреть сообщение
Код:
	len=sizeof(c);
	long ts=1;
1) ts=0 Иначе будет на +1 больше нужного
2) Я что-то сомневаюсь, что sizeof дает длину строки. Она выдаст длину указателя на строку - 4 или 1 - длина char.
valterg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упорядочить слова в строке по возрастанию их длины (SortWords(s) функция) edikesh Помощь студентам 0 03.12.2011 22:51
запись любого целого числа n (n<3999) арабскими цифрами перевести в запись римскими цифрами (на языке C) qazse Помощь студентам 1 24.11.2011 12:05
Какая функция в linux заменяет функцию gotoxy? samborboen Общие вопросы C/C++ 0 05.12.2010 02:33
Не заменяет StringReplace Alex Cones Общие вопросы Delphi 2 03.09.2009 21:00