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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2010, 09:52   #1
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию преобразование строк

Нужна помощь в С++. Мне необходимо в строке из латинских букв заменить все вхождения строки "two" на символ '2'.
вот код
Код:
#include <stdio.h>
#include <string.h>
void main() {
char st[300];
int i;
puts ("введите строку: ");
gets (st);
for (i=0; st[i]!='\0'; i++)
if (st[i]=="two") st[i]='2';
printf ("итог: %s", st);
}
он выдаёт ошибку no conversion from 'char [4]' to 'int '
видимо нужно поменять один момент, но не знаю какой. Пробовала преобразовать тип, бесполезно

Последний раз редактировалось Stilet; 25.08.2010 в 09:14.
imperceptible4462 вне форума Ответить с цитированием
Старый 24.08.2010, 10:27   #2
fenix-elite
Пользователь
 
Аватар для fenix-elite
 
Регистрация: 02.11.2008
Сообщений: 75
По умолчанию

Естественно Ибо эта строчка пугает
Код:
if (st[i]=="two")
«Когда ты действительно чего-то хочешь, вся Вселенная помогает тебе осуществить твою мечту».(с) Пауло Коэльо
fenix-elite вне форума Ответить с цитированием
Старый 24.08.2010, 10:30   #3
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию

И как тогда сделать, чтобы компилятор пропустил?
imperceptible4462 вне форума Ответить с цитированием
Старый 24.08.2010, 10:53   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Читать про функции для работы со строками или функции типа memcmp.
p51x вне форума Ответить с цитированием
Старый 24.08.2010, 10:58   #5
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от imperceptible4462 Посмотреть сообщение
И как тогда сделать, чтобы компилятор пропустил?
Код:
for (i=0; st[i+2]!='\0'; i++)
if ((st[i]=='t')&&(st[i+1]=='w')&&(st[i+2]=='o'))
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 24.08.2010, 11:01   #6
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Вот набросок
Код:
#include <stdio.h>
#include <string.h>
char* conv(char* str)
{int n=sizeof(str);
 char* st = new char[n];
 int i=0, j=0; 
 while (i<n-2)
 {
    if ((str[i] == 't') && (str[i+1] == 'w') && (str[i+2] == 'o'))
       {st[j] = '2'; i+=3;}
    else
       {st[j]=str[i]; i++;}
    j++;    
 }
 st[j]='\0';
 return st;
}
void main() {
char st[300];
int i;
puts ("введите строку: ");
gets (st);
st = conv(st);
printf ("итог: %s", st);
}
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 24.08.2010, 11:03   #7
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

можно в отдельный массив-буфер складывать постоянно каждые 3 последовательные буковки и проверять. А можно последовательно искать символ t, проверять, есть ли следом w и o.
типа такого:

Код:
i=0;
while(st[i]!='\0')
{
if((st[i]=='t')&&(st[i+1]=='w')&&(st[i+2]=='o'))
                {st[i]='2';//меняем 't' а '2'
                 for(j=(i+1);j<298;j++) //пододвигаем "хвост" строки вперед на 2 символа
                                       {
                                         s[j]=s[j+2];
                                        }
                 }
i++;
}
в задании не сказано, что нужно делать с двумя "лишними" символами (two занимает 3 лемента массива, а 2 только 1), поэтому в коде кусок строки просто сдвигается вперед, затирая 2 лишних символа.
Snejnaya вне форума Ответить с цитированием
Старый 24.08.2010, 11:43   #8
imperceptible4462
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 26
По умолчанию

Цитата:
Сообщение от mrChester Посмотреть сообщение
Вот набросок
Код:
#include <stdio.h>
#include <string.h>
char* conv(char* str)
{int n=sizeof(str);
 char* st = new char[n];
 int i=0, j=0; 
 while (i<n-2)
 {
    if ((str[i] == 't') && (str[i+1] == 'w') && (str[i+2] == 'o'))
       {st[j] = '2'; i+=3;}
    else
       {st[j]=str[i]; i++;}
    j++;    
 }
 st[j]='\0';
 return st;
}
void main() {
char st[300];
int i;
puts ("введите строку: ");
gets (st);
st = conv(st);
printf ("итог: %s", st);
}
он заменяет только первую букву, т.е. t, а wo остаются теми же

Народ, ну кто-нить знает как это сделать, чтобы всё слово заменить, а не только первую букву?

Последний раз редактировалось Stilet; 25.08.2010 в 09:14.
imperceptible4462 вне форума Ответить с цитированием
Старый 25.08.2010, 08:42   #9
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от imperceptible4462 Посмотреть сообщение
Народ, ну кто-нить знает как это сделать, чтобы всё слово заменить, а не только первую букву?
*код стерт*
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.

Последний раз редактировалось Sparkman; 25.08.2010 в 09:35. Причина: Странный компилятор :)
Sparkman вне форума Ответить с цитированием
Старый 25.08.2010, 08:43   #10
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Код подкорректировал, но в целом логика правильная.
Код:
#include <stdio.h>
#include <string.h>
char* conv(char* str)
{int n=strlen(str);
 char* st = new char[n];
 int i=0, j=0; 
 while (i<n-2)
 {
    if ((str[i] == 't') && (str[i+1] == 'w') && (str[i+2] == 'o'))
       {st[j] = '2'; i+=3;}
    else
       {st[j]=str[i]; i++;}
    j++;    
 }
 st[j]='\0';
 return st;
}
void main() {
char* st = new char[300];
int i;
puts ("введите строку: ");
gets (st);
st = conv(st);
printf ("итог: %s", st);
}
Теперь работает
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление строк в таблицу с вставкой в них текста и чередованием фона строк Centurion2xx6 Microsoft Office Word 9 30.03.2010 11:00
преобразование строк euhenia Помощь студентам 0 21.11.2009 20:19
Работа с файлами, преобразование частей строк в переменные... InCun PHP 12 09.05.2009 23:36
преобразование строк при критериям Volodymyr Microsoft Office Excel 17 21.04.2009 11:50
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14