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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2009, 18:36   #1
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию Работа со строками

Даны строки S1 и S2. Сформировать строку S таким образом, чтобы в нее вошла первая половина строки S1 и вторая четверть строки S2. Округление проводить в меньшую сторону. Сформировать строку S двумя способами:
- с использованием функций библиотеки string.h
- работая со строками как с массивами.



Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main ()
{
	char str1 = "novaya stroka 1";
	char str2 = "novaya stroka 2";
	double n1,n2;
	n1 =  str1.length;
	n2 =  str2.length;
	str1 = str1.erase(0,n1/2);
	str2 = str2.erase(3*n2/4,n2);
	printf ("%s%s",str1,str2);
	getch();
	return 0;
}
Что неправильно?

Последний раз редактировалось Sazary; 24.10.2009 в 21:12.
Дырдин вне форума Ответить с цитированием
Старый 24.10.2009, 18:53   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Дырдин
Код:
char str1 = "novaya stroka 1";
char str2 = "novaya stroka 2";
double n1,n2;
n1 = str1.length;
n2 = str2.length;
str1 = str1.erase(0,n1/2);
str2 = str2.erase(3*n2/4,n2);
Мне вот интересно, откуда Вы такое взяли?
Во-первых, объявлять строки надо не как char, а как char*.
Код:
char* str1 = "novaya stroka 1";
char* str2 = "novaya stroka 2";
Во вторых C-строки не имеют методов/свойств.
Для вычисления длины C-строки используется функция strlen
Код:
int n1 = strlen(str1); // Для длины строки лучше использовать int или size_t. Плюс не придётся вручную делать округления
аналогично нет метода erase...
Для копирования используйте strcpy или strncpy (для копирования определённого кол-ства символов:
Код:
int main()
{
    const char* str = "Array of chars";
    char newstr[80];
   
    strncpy(newstr, str, 8); // Скопирует 8 символов из str в newstr

    return 0;
}
netrino вне форума Ответить с цитированием
Старый 24.10.2009, 18:57   #3
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

Просто у меня учебник по C++. Я думал тут тоже прокатит)
Дырдин вне форума Ответить с цитированием
Старый 24.10.2009, 18:58   #4
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

А как в таком случае обрезать строку от ее 3/4 до конца?
Дырдин вне форума Ответить с цитированием
Старый 24.10.2009, 19:02   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Можно вот так, например:
Код:
#include <string.h>

int main()
{
    const char* str = "symbol, word, phrase";
    char newstr[20];
    int n = strlen(str);

    strcpy(newstr, str + n*3/4); 

    return 0;
}
netrino вне форума Ответить с цитированием
Старый 24.10.2009, 19:06   #6
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

Пасиб) А чтобы обрезать до половины значит надо strcpy(newstr, str - n/2);?
Дырдин вне форума Ответить с цитированием
Старый 24.10.2009, 19:14   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Нет. Задумайтесь над тем, что я написал) В моём коде я прибавляю три четвёртых длины строки к указателю на первый символ. А вы отнимаете от указателя на первый символ ещё половину строки ) Таким образом скопируется мусор из памяти. Я указал выше strncpy её и надо использовать для этих целей(в Вашем случае копирование первой половины строки в другую). Так же советую обратить внимание на strcat. Эта функция не просто копирует строку, а прицепляет к текущей(указанной в качестве первого параметра).
Код:
strncpy(newstr, str1, n/2);
strcat(newstr, str2+n*3/4);
netrino вне форума Ответить с цитированием
Старый 24.10.2009, 19:20   #8
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

А вот еще такой врпросик

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
int main ()
{
     char* str1 = "stroka 1";
    char* str2 = "stroka 2";
     printf ("Ishodnaya stroka 1 = %s",str1);
     printf ("\nIshodnaya stroka 2 = %s",str2);
     int n1,n2;
     n1 =  strlen(str1);
     n2 =  strlen(str2);
     char new1[n1];
     char new2[n2];
     strcpy(new1,str1 + n1/2);
    strcpy(new2,str2 + n2*3/4); 
     printf ("\nPolushivshayasya stroka = %s%s",new1,new2);
     getch ();
     return 0;
}
В этом случае пишет ошибку. Почему нельзя кол-вом элементов массива указать переменную n1?

Последний раз редактировалось Sazary; 24.10.2009 в 21:13.
Дырдин вне форума Ответить с цитированием
Старый 24.10.2009, 19:26   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Потому что n1 не известна на момент компиляции - компилятор не знает сколько именно памяти в программе отводить под new1/new2. Если уж так хочется динамического выделения памяти, то можно использовать malloc, но в данном случае вполне можно обойтись без этого.
Код:
n1 = strlen(str1);
n2 = strlen(str2);
char* newstr = (char*)malloc((n1/2)+(n2*3/4)+1); // +1 для завершающего 0
strncpy(newstr, str1, n/2);
strcat(newstr, str2+n2*3/4);
В Вашем коде вы копируете вторую половину первой строки. Как я говорил раннее - используйте strncpy.
netrino вне форума Ответить с цитированием
Старый 24.10.2009, 19:30   #10
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

strcpy(new1,str1,n1/2);
strcat(new1,str2 + n2*3/4);

Не работает. Ругается на первую строчку
Дырдин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со строками lg12 Помощь студентам 8 17.08.2009 10:07
Работа со строками semennn Помощь студентам 6 05.05.2009 19:10
Работа со строками в С++ Sien Помощь студентам 3 09.01.2009 20:02
Работа со строками pant Помощь студентам 2 30.12.2008 17:12
РАБОТА СО СТРОКАМИ kluwa Общие вопросы C/C++ 7 20.12.2007 18:30