IPB

Здравствуйте, гость ( Вход | Регистрация )

> Помогите пожалуйсто исправить программу, Помогите пожалуйсто исправить программу
Гость_aligatr-kil_*
сообщение Dec 25 2007, 21:32
Сообщение #1





Guests






Помогите пожалуйсто исправить программу : Удалите из слова все буквы, совпадающие с последней буквой.
Код
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

void main ()
{
  int i;
  int j;
  char str[100];

  cin>>str[i];

  char sym = str[strlen(str)-1];//запомнили последний
  for( int i = 0; i < strlen(str); i++)
    if( str[i] == sym )// находими нужный символ
      for( int j = i; j < strlen(str)-1; j++)
        str[i] = str[i+1];//сдвигаем хвост
  cout << str[i];
  getch();
}
Вернуться к началу страницы
 
+Цитировать сообщение
 
Создать новую тему
Ответов
Shasta Dam
сообщение Dec 27 2007, 20:08
Сообщение #2


Продвинутый пользователь
***

Группа: Posters
Сообщений: 183
Регистрация: 29.6.2007
Из: Moscow-Чебоксары-Auckland
Пользователь №: 7,397



Цитата(Ireul @ Dec 27 2007, 02:21) *
Типичная ошибка для чайника - сдвигая массив ты "перепрыгиваешь" по i одну букву, так как она из i+1 перемещается в i, а в следующей итерации цикла ты уже увеличиваешь i, и когда у тебя встречается пара целевых букв для сдвига - одну ты пропустишь.

Как вариант - --i; каждый раз как выполняешь сдвиг.
Маленькое дополнение - сдвигать гораздо удобнее при помощи вызова strcpy(str+i,str+i+1);

ЗЫ ты вообще щачем удаляешь что-то из целевой строки? Ты же выводишь посимвольно, так и выводи символ если он не совпал и выводи если совпал, а строку вообще трогать незачем.

ппц ты слепой!

Код
for( int j = i; j < strlen(str)-1; j++)
str[i] = str[i+1];//сдвигаем хвост

SiMM уже заметил. У тебя цикл по j!
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Ireul_*
сообщение Dec 28 2007, 04:21
Сообщение #3





Guests






Цитата(Shasta Dam @ Dec 27 2007, 20:08) *
ппц ты слепой!

Код
for( int j = i; j < strlen(str)-1; j++)
str[i] = str[i+1];//сдвигаем хвост

SiMM уже заметил. У тебя цикл по j!


Даже с циклом по j всё равно сохраняется та ошибка, не говоря уже о том что правильный сдвиг, при котором данные цикл отпадает, был приведён в моём посте.
Вернуться к началу страницы
 
+Цитировать сообщение
SiMM
сообщение Dec 28 2007, 08:52
Сообщение #4


PAUK-NET.RU TEAM
Иконка группы

Группа: Admin
Сообщений: 4,715
Регистрация: 11.7.2005
Из: ЮЗР
Пользователь №: 3



Цитата(Ireul @ Dec 28 2007, 04:21) *
Даже с циклом по j всё равно сохраняется та ошибка
Какая - та?
Алгоритм, конечно, не ахти (одного цикла без строковых функций достаточно) и не лишён недостатка (выводится только один, последний символ). Ну и код был нифига не отформатирован.
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Smacker_*
сообщение Dec 29 2007, 11:49
Сообщение #5





Guests






Ну, я конечно не уверен, что авторская задумка была именно такая, но если расставить фигурные скобки и исправить индексирование во втором цикле, то в принципе вырисовывается нечто работоспособное:

Код
#include <iostream>
using namespace std;

void main ()
{
    char str[100];
    cin>>str;

    char sym = str[strlen(str)-1];
    for( unsigned int i = 0; i < strlen(str); i++)
    {
        if( str[i] == sym )
        {
            unsigned int j = i;
            for(; j < strlen(str)-1; j++)
            {
                str[j] = str[j+1];
            }
            str[j] = 0;
        }
    }
    cout << str;
}
Вернуться к началу страницы
 
+Цитировать сообщение

Сообщений в этой теме


ОтветитьСоздать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19th June 2025 - 18:11