Форум программистов, компьютерный форум CyberForum.ru

Вставить в строку s содержимое s1 начиная с позиции n - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 13:55     Вставить в строку s содержимое s1 начиная с позиции n #1
Помогите пожалуйста написать программу!
Вставить в строку s содержимое s1 начиная с позиции n. То есть сначала идут n-первых символов s, тогда символы s1, а дальше-те символы, которые были у s до вставки s1, начиная с позиции n.
Это нужно сделать не используя библиотеки <string.h>, а создать собственную функцию Insert (s, s1, n) ...
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2011, 13:55     Вставить в строку s содержимое s1 начиная с позиции n
Посмотрите здесь:

C++ Вставка в строку другой строки, начиная с заданной позиции
Установка L символов строки s в значение t, начиная с позиции n C++
C++ как в файле удалить n байт, начиная с заданной позиции
C++ Вставить в строку 1 содержимое строки 2 (#C) <String.h>
C++ Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита
Скопировать из одного символьного массива в другой, начиная с определенной позиции C++
Установка l символов строке s, начиная с позиции n, в значение t C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
14.07.2011, 13:57
  #2

Не по теме:

VolodiaVoz, Если не секрет, где учишься ?

VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 14:05  [ТС]     Вставить в строку s содержимое s1 начиная с позиции n #3
Цитата Сообщение от asics Посмотреть сообщение

Не по теме:

VolodiaVoz, Если не секрет, где учишься ?

Не очень хорошо пишу на руском!
С++ не мой конек!
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1919 / 1031 / 72
Регистрация: 29.03.2010
Сообщений: 3,166
14.07.2011, 14:13     Вставить в строку s содержимое s1 начиная с позиции n #4
читайте классику СЭэээр. http://msdn.microsoft.com и ничего писать не надо, ну а если уж сильно хочется, то:
C++
1
2
3
4
5
6
7
8
char * insertSTR(char *str1, char *str2, int n){
  int newSize = strlen(str1)+strlen(str2);
  char *newStr = new char[newSize];
  memset(newStr, '\0', newSize);
  strncpy(newStr, str1, n);
  strcat(newStr, str2);
  strcat(newStr, str1 + n);
}
ЗЫ: писал прям тут, не факт что скомпилиться

Добавлено через 2 минуты
+ нужно проверить, не больше ли число n строки str1 и т.д. и т.п., ну это думаю уже сами

Добавлено через 1 минуту
пардон, в конце нужно дописать return newStr;
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.07.2011, 14:23     Вставить в строку s содержимое s1 начиная с позиции n #5
Мой вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <memory.h>
#include <string.h>
 
char*  insert(char* str, const char* spos, int pos) {
    int len = strlen(str);
    int cnt = strlen(spos);
    memmove(str + pos + cnt, str + pos, len + cnt);
    strncpy(str + pos, spos, cnt);
    return str;
}
 
 
int main(void)
{
   char str[32];
   strcpy(str, "subaru wrx.");
 
   puts( insert(str, "-impreza", 6) );
 
   getchar();
   return 0;
}
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 14:24  [ТС]     Вставить в строку s содержимое s1 начиная с позиции n #6
А как сделать собственную функцию Insert (s1, s2, p) - процедура вставки строки s1 в строку s2, начиная с позиции p.Наведемо пример действия процедуры вставки: Insert ('сон', 'л', 2), результатом будет - 'слон'. В твоем варианте мы использовали библиотеку <string.h> ее не нужно использовать!
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 14:30     Вставить в строку s содержимое s1 начиная с позиции n #7
VolodiaVoz, разгадаешь загадку запостю решение:

"
перед тобой 3 ведра. в них есть 3 вида шаров: синие, красные и перемешанные (синие + красные).
ведра подписаны ("красные", "синие", "перемешанные"), но известно, что все они подписаны неверно.
не смотря в содержимое ведра ты можешь вытащить 1 шар из 1-го ведра. после этого ты должен сказать , что - где лежит. как это сделать?
"
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1919 / 1031 / 72
Регистрация: 29.03.2010
Сообщений: 3,166
14.07.2011, 14:47     Вставить в строку s содержимое s1 начиная с позиции n #8
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
А как сделать собственную функцию Insert (s1, s2, p) - процедура вставки строки s1 в строку s2, начиная с позиции p.Наведемо пример действия процедуры вставки: Insert ('сон', 'л', 2), результатом будет - 'слон'. В твоем варианте мы использовали библиотеку <string.h> ее не нужно использовать!
ох ты ж ёжик.... ну если уж так сильно хочется, напиши так:
C++
1
2
3
4
5
6
7
8
9
10
11
char * myCrippleInsertChars(char * str1, int sizeStr1, char * str2, int sizeStr2, int polniyP){
   char * newStr = new char[sizeStr1 + sizeStr2];
   int newSizeIter = 0;
   for(int i = 0; i < polniyP; i++, newSizeIter++)
      newStr[newSizeIter] = str1[i];
   for(int i = 0; i < sizeStr2; i++, newSizeIter++)
      newStr[newSizeIter] = str2[i];
   for(int i = polniyP; i < sizeStr1; i++, newSizeIter++)
      newStr[newSizeIter] = str1[i];
   return newStr;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.07.2011, 14:47     Вставить в строку s содержимое s1 начиная с позиции n #9
Вот без string.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
 
 
char*  insert(char* str, const char* spos, int pos) {
     char* tmp  = str;
     const char*  ps;
     int   len1, len2, cnt, i;
 
     for(len1 = 0, ps = spos; *ps; *ps++, len1++);
     for(len2 = 0, ps = str;  *ps; *ps++, len2++);
     cnt = len1;
     while(cnt--) {
         for(i = len2+len1; i >= pos; i--)
            *((str) + i + 1) = *((str)+ i);
     }
     str += pos;
     while(*spos)
        *str++ = *spos++;
     return tmp;
}
 
 
 
int main(int argc, char* argv[])
{
   char str[32] = { "hoe my." };
 
   puts( insert(str, "m", 2) );
 
   getchar();
   return 0;
}
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1919 / 1031 / 72
Регистрация: 29.03.2010
Сообщений: 3,166
14.07.2011, 14:47     Вставить в строку s содержимое s1 начиная с позиции n #10
а вообще - это не правильное решение задачи, а правильное Вы получите, после отгадывания загадки)))
co6ak
Кошковед
 Аватар для co6ak
406 / 499 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.07.2011, 14:48     Вставить в строку s содержимое s1 начиная с позиции n #11
ответ: вытащить из микса и сделать выводы по цвету шарика.
пости решение, а то мне тоже интересно как сделать
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.07.2011, 15:01     Вставить в строку s содержимое s1 начиная с позиции n #12
Цитата Сообщение от OstapBender Посмотреть сообщение
VolodiaVoz, разгадаешь загадку запостю решение:

"
перед тобой 3 ведра. в них есть 3 вида шаров: синие, красные и перемешанные (синие + красные).
ведра подписаны ("красные", "синие", "перемешанные"), но известно, что все они подписаны неверно.
не смотря в содержимое ведра ты можешь вытащить 1 шар из 1-го ведра. после этого ты должен сказать , что - где лежит. как это сделать?
"
Имеем:
Код
  red    blue    mix
Берем из перемешанных, но т.к. все неверно, значит в этом ведре либо все синие, либо все красные:
1. Если попался красный, тогда
Код
  blue    mix    red
2. Попался синий -
Код
   mix    red    blue
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.07.2011, 15:09     Вставить в строку s содержимое s1 начиная с позиции n #13
co6ak,
Net_Wanderer,
)) ну да верно

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

задачка кстати с реального собеседования)
да и простая она довольно.
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
14.07.2011, 15:31     Вставить в строку s содержимое s1 начиная с позиции n #14
таки ещё вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
void Insert(char* a, char* b, size_t n){
    char res[512], *p=res, *a1=a;
    do{
        if(p-res==n){
            for(; *p=*b; ++p, ++b);
        }
    }while(*p++=*a++);
    for(p=res; *a1=*p; ++a1, ++p);
}
 
int main (){
    char a[512]="aaaaa", *b="bbbb";
    size_t n=2;
    Insert(a, b, n);
    puts(a);
    return 0;
}
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 17:07  [ТС]     Вставить в строку s содержимое s1 начиная с позиции n #15
Цитата Сообщение от co6ak Посмотреть сообщение
ответ: вытащить из микса и сделать выводы по цвету шарика.
пости решение, а то мне тоже интересно как сделать
Но мы не знаем где есть mix ведра подписаны не правильно!
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1919 / 1031 / 72
Регистрация: 29.03.2010
Сообщений: 3,166
14.07.2011, 17:17     Вставить в строку s содержимое s1 начиная с позиции n #16
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Но мы не знаем где есть mix ведра подписаны не правильно!
ух ты ж и тугой..... извини конечно
а действительно, где ты учишься? я надеюсь не в компьютерной области?
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 17:25  [ТС]     Вставить в строку s содержимое s1 начиная с позиции n #17
Цитата Сообщение от l_a_m Посмотреть сообщение
ух ты ж и тугой..... извини конечно
а действительно, где ты учишься? я надеюсь не в компьютерной области?
Фігню морозеш!!! Ти хорошо подумай - у тебя ответ не верен!
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1919 / 1031 / 72
Регистрация: 29.03.2010
Сообщений: 3,166
14.07.2011, 17:27     Вставить в строку s содержимое s1 начиная с позиции n #18
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Фігню морозеш!!! Ти хорошо подумай - у тебя ответ не верен!
ответ на что? на задание по программированию или по логике?
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
14.07.2011, 17:33  [ТС]     Вставить в строку s содержимое s1 начиная с позиции n #19
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Фігню морозеш!!! Ти хорошо подумай - у тебя ответ не верен!
От где ти учишса? Сказал би где у тебя ошибка да много писать!
Откуда знаеш что взял с mix-видра!!
Короче ищо думай!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2011, 17:33     Вставить в строку s содержимое s1 начиная с позиции n
Еще ссылки по теме:

C++ Функция, инвертирующая в целом числе n разрядов, начиная с позиции p
C++ Удалить из строки заданное количество символов, начиная с заданной позиции. Преобразовать строку таким образом
C++ Заменить в числе a v битов, начиная с n-й позиции
C++ Реализовать вставку подстроки в строку, начиная с заданной пользователем позиции
Вставить подстроку в строку, начиная с позиции n C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kastaneda
14.07.2011, 17:33     Вставить в строку s содержимое s1 начиная с позиции n
  #20

Не по теме:

Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Но мы не знаем где есть mix ведра подписаны не правильно!
Сижу за компом, по телеку фоном идет реклама "Счастливы вместе", вот реально блондинку от туда напомнило


Yandex
Объявления
14.07.2011, 17:33     Вставить в строку s содержимое s1 начиная с позиции n
Закрытая тема Создать тему
Опции темы

Текущее время: 13:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru