• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Строки

  • Автор темы Автор темы shrek=)
  • Дата начала Дата начала

shrek=)

Студент БГПУ
Почётный участник
Регистрация
6 Фев 2010
Сообщения
420
Реакции
6
Баллы
0
Строки

Доброго времени суток!
Пожалуйста помогите.
Есть не большие проблемы со строками.
1) Необходимо удалить первую букву в каждом слове строки.
2) Вывести все слова встречающиеся один раз.

З.Ы. Для первой нельзя использовать дополнительный массив.
Для обеих задач нельзя использовать стандартные функции языка, за исключением длины строки.

Несколько дней ломаю голову ни чего не могу придумать:tehnari_ru_837:. ЯП вообще С++, но можно и паскаль.
 
На с++ вот так придумал, но что то в нем не то.

Код:
 char st1[]="11 22 33 44 555 666 777 888";
     puts(st1); 
     for (int i=1;i<strlen(st1); )  
     if (st1[i-1]!=' ') 
     {   
        st1[i-1]=st1[i];
        i++;
            }
        else 
        { i+=2;
             st1[i-1]=st1[i]; 
              }            

     puts(st1);
getchar();
 
На с++ вот так придумал, но что то в нем не то.
Миша, на Паскале у меня первая задачка получилась как-то так:
Код:
Var
 S:String;
 i,j:Byte;
Begin
 S:='Long ago there were three pigs';
 Writeln(S);
 For i:=1 to Length(S)-1 do S[i]:=S[i+1];
 S[Length(S)]:=' ';
 For i:=1 to Length(S) do
  If S[i]=' ' then
   begin
    for j:=i+1 to Length(S)-1 do S[j]:=S[j+1];
    S[Length(S)]:=' ';
   end;
 Writeln(S);
 Readln;
End.
 
Спасибо огромное.
 
А вторую задачу не подскажите, а то я сам не могу сообразить!
 
Миша, создай 2 массива, 1 содержащий все слова и 1, содержащий количество включений каждого слова в текст. Это самый простой способ решения :)
 
Да и нет в С++ такового понятия как строковый массив.
 
Во второй задаче выбор функций(стандартных) не ограничен?
 
Ограничен, только длина строки.
 
А если по-символьно считывать каждое слово до символа-разделителя слов, а потом во внутреннем цикле последовательно, начиная с первого символа и до символа с номером длина_строки-длина_слова вырезать участки строки длиной, равной длине слова, и сравнивать их с ним. Если в результате сравнения получается только одно совпадение - это слово встречается в тексте только один раз, его можно сразу выводить как один из результатов. После выход из внутреннего цикла и считывание следующего слова. И так до конца строки.
 
Назад
Сверху