powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / вырезает число из строки после запятой
25 сообщений из 79, страница 2 из 4
вырезает число из строки после запятой
    #39967810
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

А для чего ты кладешь искомое число строку, если можно вернуть само число в соответствующем числовом типе данных?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967817
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Basil A. Sidorov
"Вырезать из строки число после запятой" означает, что надо отыскать первую запятую и скопировать в результат все цифры, которые найдутся после этой запятой.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
void numbercut(const char* s1, char* result)
//копируем число из строки после запятой в строку result
{
	while(  *s1 != '\0' ) {
		if (*s1 == ',') {
			s1++;
			while(isdigit(*s1)) {
				*result = *s1;
				s1++;
				result++;
			}
                        // bug sits here
			if ( isdigit(*(result-1)) ){
				break;
			}
		}
		else
			s1++;
	}
	*result = '\0';
}



здесь исправленный код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
void numbercut(const char* s1, char* result)
//копируем число из строки после запятой в строку result
{
	short is_digit = 0;
	while(  *s1 != '\0' ) {
		if (*s1 == ',') {
			s1++;
			while(isdigit(*s1)) {
				is_digit = 1;
				*result = *s1;
				s1++;
				result++;
			}
			if ( is_digit ){
				break;
			}
		}
		else
			s1++;
	}
	*result = '\0';
}


...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967820
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Код: plaintext
1.
short is_digit = 0;

В Си булевый тип уже отменили?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967821
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

в С булевого типа не было изначально
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967822
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, ты прикалываешся со своими стоп-кадрами?

Делай просто исходник с подсветкой одной строки.

Пример вот:
Код: plaintext
1.
2.
3.
4.
void numbercut(const char* s1, char* result)
//копируем число из строки после запятой в строку result
{
	while(  *s1 != '\0' ) {
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967823
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
итак ход выполнения второго цикла :
итерация 1 там запятая мы её игнорим - итерация как писал ранее не интересна .
итерация 2 стоп-кадр1 - всё понятно. только что отработала строка помеченная стрелочкой
итерация 2 стоп-кадр2 - а вот тут уже интересно: здесь только что отработала строчка ниже после предыдущей
и почему в result такие значения ?

Всё правильно она отработала, указатель сдвинулся.
Дебаж выхлопом в stdout, как мужик!
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967824
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужас вы какой-то пишете...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void numbercut(const char* s1, char* result) //вырезает число из строки после запятой
{
  const char*p = strchr(s1, ',');
  if (p != NULL)
  {
     p++;
     while (isdigit(*p))
     { 
        *result++ = *p++;
     }
  }
  *result = '\0'; //маркируем конец строки.
}


И не надо фантазировать о segfault в теоретических случаях: s1 по определению null-terminated иначе вторым параметром должна быть длина.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967825
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Рисковые вы парни. А что с памятью под result?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967826
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strtok еще можно посмотреть. Она поумнее чем atoi.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967827
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmasterА что с памятью под result?

То же самое, что и с нуль-терминированностью: на совести вызывающего. Автор не полный
дурак, у него размер выходного буфера равен размеру входного.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967828
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
AmKad,

в С булевого типа не было изначально

Он там есть начиная с С99. Подключить <stdbool.h>.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967829
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

TEST: "abcd, no numbers, and here goes the number,100"
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967830
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad
andron81,

А для чего ты кладешь искомое число строку, если можно вернуть само число в соответствующем числовом типе данных?


да, согласен . правильней вообще сделать numbercut с результатом в int и накапливать число поразрядно так и сделаю
Но раз уж ввязался так , то надо и понять мою проблему.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967831
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята. Вы сейчас все хотите срочно создать свой очередной FSM который решает кастомную задачу.

Почему у вас нет желания просто пере-использовать atoi/strtok/scanf ?

Ведь это же нормально. Это - инженерный подход.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967832
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabTEST: "abcd, no numbers, and here goes the number,100"

И? Я вижу отсутствие цифр после запятой. В задании не сказано "все цифры после любой из
запятых". То есть возвращаемся к вопросу о постановке задачи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967833
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПочему у вас нет желания просто пере-использовать atoi/strtok/scanf ?

Потому что ничто из перечисленного её не решает. Автору нужен результат в символьном виде.
Иначе, конечно, всё можно свести к "atoi(strchr())".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967834
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster

Всё правильно она отработала, указатель сдвинулся.


указатель то сдвинулся .
но почему в контрольных значениях result,6

даёт
"\0\0\0\0\0\0",
а не
"1\0\0\0\0\0"

???
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967835
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonПочему у вас нет желания просто пере-использовать atoi/strtok/scanf ?

Потому что ничто из перечисленного её не решает. Автору нужен результат в символьном виде.
Иначе, конечно, всё можно свести к "atoi(strchr())".

Ну так strtok решает. Правда я-бы почитал модифицирует ли он source.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967836
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ведь это же нормально. Это - инженерный подход.

Это - не спортивно. Так-то можно просто взять и переиспользовать регулярку.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967837
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

А почему он должен давать не нули? Он сдвинулся вперёд. Впереди нули.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967839
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
1) C99 это не изначально.
2) я не вижу причин использовать <stdbool.h>
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967842
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу так strtok решает.

Нет, он всего лишь нарубит строку на куски. Вокруг него придётся оборачивать гораздо
больше кода для получения результата.

maytonПравда я-бы почитал модифицирует ли он source.

Это каждый знает по памяти: модифицирует.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967843
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

mini.weblabTEST: "abcd, no numbers, and here goes the number,100"

И? Я вижу отсутствие цифр после запятой. В задании не сказано "все цифры после любой из
запятых". То есть возвращаемся к вопросу о постановке задачи.

Специально проверил. В задании сказано не так. Так запрограммировано. :)
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967844
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
andron81,

А почему он должен давать не нули? Он сдвинулся вперёд. Впереди нули.


потому что мы выполнили *result = *s1;
тогда result,6 должен выглядеть как "1\0\0\0\0\0"

и мне казалось, что даже после result++
тоже result,6 должен выглядеть как "1\0\0\0\0\0"
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81и мне казалось, что даже после result++
тоже result,6 должен выглядеть как "1\0\0\0\0\0"

Это тебе казалось. Сделай уже как рекомендуется всем начинающим: выполни программу
самостоятельно, используя мозг вместо процессора и бумажку с ручкой вместо ОЗУ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 2 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / вырезает число из строки после запятой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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