Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не изменяет строку. / 17 сообщений из 17, страница 1 из 1
12.09.2016, 18:10
    #39307889
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
Есть исходная строка и с помощью функций я её должен изменить,там после каждого слова добавить точку и пробел.
Но у меня почему-то выводится пустая строка

Код: plaintext
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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <string.h>

using namespace std;

void copystring(char *str,char *str1)
{
	char *in_str = str;
	char *out_str = str1;//используем указатели
	

	 *str1 = ' ';
    ++str1;
	 while(!str)
    {
        if (*str == '.') 
        {
            *str1 = '.';
            break;
        }
        if (*str != ',')
            *str1 = *str;
        else 
        {
           *str1 = '\.';
            ++str1;
           *str1 = ' ';
        }
        ++str;
        ++str1;
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"Russian");
	char str[100]={"one two three four five"};
	char str1[100]=" ";
	cout<<"Исходная строка"<<endl;
	cout<<str<<endl;
	cout<<"Полученная новая строка"<<endl;
	copystring(str,str1);   
	cout<<str1<<endl;
    system("pause");
	return 0;
}
...
Рейтинг: 0 / 0
12.09.2016, 19:01
    #39307920
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
otarsНо у меня почему-то выводится пустая строка
И это логично: ведь именно так написано в программе. Запускай её под отладчиком, проходи
пошагово каждую строчку и смотри где ожидаемое поведение начинает отличаться от реального.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.09.2016, 19:47
    #39307952
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
otars
Код: plaintext
1.
	 while(!str)


Это к чему написано?
...
Рейтинг: 0 / 0
12.09.2016, 20:02
    #39307966
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
Dima T,
пока не конец строки.

дело в том что если я напишу
Код: plaintext
1.
while (str!='\0')


то выскочит исключение,Access violation
...
Рейтинг: 0 / 0
12.09.2016, 20:05
    #39307970
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
otarsDima T,
пока не конец строки.
нет, там написано
Код: plaintext
1.
while(false)


если начал использовать указатели, то будь добр разобраться как их использовать.
...
Рейтинг: 0 / 0
13.09.2016, 01:28
    #39308080
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
otars, ваш код настолько невнятный, что он не подлежит восстановлению, можно только написать новый:
Код: plaintext
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.
#include <assert.h>
#include <string.h>

void separate_words(const char* src, char* dest) {
  for (;;) {
    // пропускаем пробелы
    while (*src == ' ') src++;

    if (*src == '\0') // если достигли конца строки
      break; // выходим из цикла

    // копируем слово
    while ((*src != ' ') && (*src != '\0'))
      *dest++ = *src++;

    // пишем разделитель
    *dest++ = '.';
    *dest++ = ' ';
  }
  // пишем нулевой char, который завершает (terminate) строку
  *dest++ = '\0';
}

int main() {
  char buf[100];
  separate_words("one two three four five", buf);
  assert(strcmp(buf, "one. two. three. four. five. ") == 0);
  return 0;
}
...
Рейтинг: 0 / 0
13.09.2016, 10:07
    #39308162
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
Попробую под себя переделать.
Спасибо!
...
Рейтинг: 0 / 0
14.09.2016, 07:39
    #39308767
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
std::string же!!! std::string! std::string! забудьте нафиг char* - это только ошибки генерировать. там, где вы эту функцию будете спользовать, вы уверены что хватит памяти во второй строке?


вот, у меня код, который экранирует html
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void html::widgets::widget::escape_html(std::string& data)
{
	std::string buffer;
	buffer.reserve(data.size());
	for(size_t pos = 0; pos != data.size(); ++pos) {
		switch(data[pos]) {
			case '&':  buffer.append("&");       break;
			case '\"': buffer.append(""");      break;
			case '\'': buffer.append("'");      break;
			case '<':  buffer.append("<");        break;
			case '>':  buffer.append(">");        break;
			default:   buffer.append(&data[pos], 1); break;
		}
	}

	data.swap(buffer);
}

я его не рефакторил и не профилировал, но для начала сойдет.
...
Рейтинг: 0 / 0
14.09.2016, 07:41
    #39308768
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
блин, символы переделались )))
там были не кавычки, а их эквиваленты :) даже не знаю как тут вставить правильно :)
...
Рейтинг: 0 / 0
14.09.2016, 08:19
    #39308778
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
alexy_blackзабудьте нафиг char*
Полагаю это учебное задание.

Фундамент понимания языка С++ - понимания того, что единственное что он позволяет делать, это оперировать байтами в памяти. И важно понимать адресное пространство, то что оно "прерывисто", то что информация в памяти не имеет сигнатуры типа и может быть интерпретирована как любой тип и т.д.
...
Рейтинг: 0 / 0
14.09.2016, 11:07
    #39308877
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
alex_kalexy_blackзабудьте нафиг char*
Полагаю это учебное задание.

Фундамент понимания языка С++ - понимания того, что единственное что он позволяет делать, это оперировать байтами в памяти. И важно понимать адресное пространство, то что оно "прерывисто", то что информация в памяти не имеет сигнатуры типа и может быть интерпретирована как любой тип и т.д.

Как бы в данном случае скорее важно элементарное понимание программирования.
ТС явно просто не врубается, что у него в программе происходит.
...
Рейтинг: 0 / 0
14.09.2016, 22:19
    #39309333
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
по-моему легче сначала научиться использовать std::string а потом уже допереть до указателей и прочего..
навреное же вы сначала выучили c++ (или что другое) а уже потом assembler (может и наоброт, но я почему-то не думаю, что вы будуте советовать это другим:) )
...
Рейтинг: 0 / 0
14.09.2016, 22:27
    #39309334
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
alexy_blackпо-моему легче сначала научиться использовать std::string а потом уже допереть до указателей и прочего..
навреное же вы сначала выучили c++ (или что другое) а уже потом assembler (может и наоброт, но я почему-то не думаю, что вы будуте советовать это другим:) )И будешь не прав.
Человек знающий ассемблер, понимает работу с указателями на инстинктивном уровне.
...
Рейтинг: 0 / 0
15.09.2016, 00:26
    #39309363
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
alexy_blackstd::string же!!! std::string! std::string!Сентябрь, начало семестра, первая лаба про указатели:
otars
Код: plaintext
1.
	char *out_str = str1;//используем указатели

Лаба про STL-контейнеры (в том числе std::string) будет потом :).

alexy_blackтам, где вы эту функцию будете спользовать, вы уверены что хватит памяти во второй строке?Естественно, если писать код по-взрослому, то никакого «char buf[100]» быть не должно. Это просто чтобы сфокусироваться на работе с указателями, а динамическое распределение памяти можно освоить потом.

alexy_blackвот, у меня код, который экранирует htmlЯ если пишу код с std::string, то в качестве string builder-а использую std::ostringstream:
Код: plaintext
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.
33.
34.
#include <assert.h>
#include <string>
#include <sstream>

using namespace std;

string separate_words(const char* src) {
  ostringstream stream;
  for (;;) {
    // пропускаем пробелы
    while (*src == ' ')
      src++;

    if (*src == '\0') // если достигли конца строки
      break; // выходим из цикла

    // сканируем слово
    const char* word = src;
    while ((*src != ' ') && (*src != '\0'))
      src++;
    size_t word_len = src - word;
    // пишем слово
    stream.write(word, word_len);

    // пишем разделитель
    stream << ". ";
  }
  return stream.str();
}

int main() {
  assert(separate_words("one two three four five") == "one. two. three. four. five. ");
  return 0;
}
...
Рейтинг: 0 / 0
15.09.2016, 07:00
    #39309396
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
alexy_blackнавреное же вы сначала выучили c++ (или что другое) а уже потом assembler (может и наоброт, но я почему-то не думаю, что вы будуте советовать это другим:) )

Я начала с программируемого калькулятора МК-61 :) Потом ассемблер КР580ВМ80А и Z80A, потом ассемблер i8086, потом паскаль, потом си и потом уже с++ :)
...
Рейтинг: 0 / 0
17.09.2016, 00:00
    #39310692
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
White Owl, я говорил про обучение, даже про начало обучения, а не про реальное программирование. не даром началом обычно считают std::cout << "Hellow, World!" << std::endl; , а не вывод тово же самого через системное прирываение :) а так-то конечно, соберешь много сюрпризов, если не понимаешь как работает компьютер "по настоящему".

Пётр Седов, это смотря для какой задачи. в потоках есть куча всего, что не нужно для некоторых задач. например локаль. если нужно просто заменить какой-то символ, то наверное легче использовать std::string
я давно очень низкого мнения о системе образования. когда я пришел учиться в вуз, на подкурсы, с удивлением обнаружил,что код у меня лучше, чем у многих преподов. как потом оказалось, даже опыта у меня тогда, у школника, в написании реальных програм было больше :( это не потому что я так много программировал, а потому что эти клоуны вобще не писали реальных програм. только единицы способны чему-то обучить. вот, такие задачи по плюсам яркий пример.

alex_k, это мощьно :)
...
Рейтинг: 0 / 0
18.09.2016, 19:58
    #39311053
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяет строку.
alexy_blackWhite Owl, я говорил про обучение, даже про начало обучения, а не про реальное программирование.Ну я тоже говорил про обучение.

alexy_black не даром началом обычно считают std::cout << "Hellow, World!" << std::endl; , а не вывод тово же самого через системное прирываение :) а так-то конечно, соберешь много сюрпризов, если не понимаешь как работает компьютер "по настоящему".Глупости ты говоришь. Началом обучения считают то, по чему есть учебник/учитель и что можно пощупать руками. А будет ли это перенаправление потоков, использование ключевого слова языка или использование прерываний абсолютно не важно. Ученику показали: вот так это работает. Ученик попробовал - действительно работает. Ученик счастлив. И этому ученику абсолютно до лампочки насколько различные "гуру" считают этот подход дурацким.

alexy_blackalex_k, это мощьно :)это не мощно. Это стандартно для всех кто начинал в конце 80-х, начале 90-х.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не изменяет строку. / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]