powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / вырезает число из строки после запятой
79 сообщений из 79, показаны все 4 страниц
вырезает число из строки после запятой
    #39967641
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
дано : чистый Си без плюсов !
Задача : есть массив символов (будем называть такие массивы в данной задаче строками) . в ней после запятой число. так вот надо вырезать это число и сохранить в другую строку.
Но не работает. Запускаю пошагово:
1) первая итерация во втором цикле успешно пропускается так как запятая
2) вторая итерация на строке
Код: plaintext
1.
*result = *s1;  


тоже отрабатывает предсказуемо.
но затем я выполняю
Код: plaintext
1.
result++


я думал должен быть переход на указатель следующего символа в строке result, однако происходит непонятная вещь. такое ощущение, что перехода на следующий символ не происходит и пишется всё в первый.
Что я делаю не так , где туплю ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void numbercut(const char* s1, char* result) //вырезает число из строки после запятой
{
       for (; *s1 != ','; s1++); //доходим до запятой
    for (; *s1 != '\0'; s1++) {
        if (isdigit(*s1)) { 
            *result = *s1; 
            result++; 
        }
    }
    *result = '\0'; //маркируем конец строки.
}
int main(){
    char cut[100]="";
    char source[100]="abcd,100";
    numbercut(source, cut);
return 0 ;
}
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967651
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

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

Возможно ты пытаешься отлаживать Релиз версию. Переключись на Дебаг. Другое дело что у тебя в коде... ну глюк скажем так. Попробуй:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int cutTest()
{
    char cut[100]="";
    char source[100]="abcd,1*2*3*4";
    numbercut(source, cut);
    return 0 ;
}


Результат:

авторcut == "1234"
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967661
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
source = "abcd, 100, no number 234, another number,101, and one more,102"

что ваша функция должна возвратить?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967671
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,
Не рассматриваем такие варики
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967681
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так затесть
Код: plaintext
1.
char source[100]="abcd100";



И надо бы добавить вывод результата, иначе оптимизатор упростит этот код до
Код: plaintext
1.
return 0 ;
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967686
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
Что я делаю не так

Код: plaintext
1.
2.
for (; *s1 != ','; s1++);
for (; *s1 != '\0'; s1++)


s1 не содержит "," => segfault
s1 не null terminated => segfault
Код: plaintext
1.
char cut[100]


result короче, чем должен - повреждение памяти => segfault / уязвимость с выполнением произвольного кода.

Си - это серьёзно. Нельзя вот так вот код шлёпать.
Модератор: Edited
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967694
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте обсуждать топик а не автора.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967700
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Ну а что он провоцирует? Я сейчас вот тоже зайду под виртуалом и наваяю сборник нубских ошибок.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967703
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо нам тут никаких виртуалов. Он - новичек. Задает вопросы новичка. Тоесть все как-бы по феньшую.

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

Ладно, ладно. Пойду приму таблетки
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967709
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <cstdlib>
#include <string>
#include <regex>
#include <stdio.h>

using namespace std;

int main(int argc, char** argv)
{
  std::string str = "The test, message,the, test ,message";
  str = regex_replace(str, std::regex("(,.*)+$"), "");

  printf("\r\n%s\r\n", str.c_str());

  return 0;
}
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967710
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev, читай ТЗ внимательно
andron81
дано : чистый Си без плюсов !
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967715
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Надо с glibc регулярку, но не знаю, считает ли TC её кошерной.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967718
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно scanf попробовать еще. Он имеет сходный функционал. И даже atoi обладает некой толерантностью
к строкам.

Только надо кейсы описать. Типа

InOut100100hello,100100hello,100,world100hello,world0, or throw an error!
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967725
crutchmaster
rdb_dev,

Надо с glibc регулярку, но не знаю, считает ли TC её кошерной.

регулярку для ловли запятой - это как из пушки по воробьям
регулярки тяжёлые
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967730
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InOutscanfatoicustom FSM100100+100,world100+hello,100100hello,100,world100hello,world0, or throw an error!
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967734
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и еще проблема в том что в сях (кажется) нет механизма исключений. Тоесть если мы не нашли число?

Вроде есть сигналы. Но как они применимы в данном случае - ХЗ.

Ну а у автора в его сорцах протокол вообще простой. Если мы не нашли число то мы просто не заполняем result.
Хотя мне такой подход не нравится. Ведь ожидалось число.

И еще непонятно что делать с сверх-длинными целыми числами которые не влезают в регистр.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967736
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InOutscanfatoicustom FSMFAT and ugly regular expr100100++100,world100++hello,100100+hello,100,world100+hello,world0, or throw an error!+10000000000000000000000000?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967752
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Вырезать из строки число после запятой" означает, что надо отыскать первую запятую и скопировать в результат все цифры, которые найдутся после этой запятой.
Никаких чисел в регистрах и размеров регистров в этой задаче нет. Есть уточняющие вопросы.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967753
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это просто развитие идеи.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967775
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была в одном из номеров журнала "Техника-молодёжи" шутливая страница "Зачем просто, если можно сложно?". Технический юмор на марше.
А "развитие идеи" это такая шутка программистов, которая непонятна blockman?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967778
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заметь! Регулярки я не предлагал
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967804
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
rdb_dev,
Надо с glibc регулярку, но не знаю, считает ли TC её кошерной.


конечно же это жесть. регулярки ещё тут не хватало.
код действительно рабочий: на выходе число после запятой, но отладка работает странно. стоит режим Debug.
итак ход выполнения второго цикла :
итерация 1 там запятая мы её игнорим - итерация как писал ранее не интересна .
итерация 2 стоп-кадр1 - всё понятно. только что отработала строка помеченная стрелочкой
итерация 2 стоп-кадр2 - а вот тут уже интересно: здесь только что отработала строчка ниже после предыдущей
и почему в result такие значения ?


стоп-кадр1

стоп-кадр2
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967809
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';
}
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #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
вырезает число из строки после запятой
    #39967847
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
повышаем ставки: прочитаю все числа после всех запятых
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967849
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
Dimitry Sibiryakov,
повышаем ставки: прочитаю все числа после всех запятых

+1

Вот это по нашему. Генерализируем эту хрень.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967850
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabповышаем ставки: прочитаю все числа после всех запятых

Удваиваю: прочитаю все цифры после запятой вне зависимости от расстояния до неё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967851
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

читаем любые цифры после запятых
Код: 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.
#include <stdio.h>
#include <string.h>
#include <ctype.h>

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 ){
				*result = ' ';
				result++;
				continue;
			}
		}
		else
			s1++;
	}
	*result = '\0';
}

int main(int argc, char **argv) {
    char cut[100];
    char source[100]="abcd, no numbers,234 and here goes the number,100";
    numbercut(source, cut);

    printf("Source: %s\n", source);
    printf("Numbers: %s\n", cut);

    return 0 ;
}


...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967853
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
это не считается, потому что ТС это уже запрограммировал
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967854
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В некоторой гипотетической грязно-хакерской вселенной эта задача решается просто перестановкой указателя.

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


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

Код: plaintext
1.
         *result++ = *s1++;



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

Естессно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967863
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
compilation error: while((s1 = strchr(s1, ',')) != NULL)
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967865
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonкодил под PDP ?

Естессно.

Где же и когда это происходило?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967866
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabcompilation error

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

mini.weblabcompilation error

Значит надо исправить компилятор.

А зачем вы пользуетесь сломанным компилятором? У вас там ошибка же. :)
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967870
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravУ вас там ошибка же. :)

У меня там ошибка, да. Но в строке, приведённой mini.weblab, этой ошибки нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967873
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю свести задачу к 1 вызову strchr и 1 strcpy.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967874
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
да, согласен . правильней вообще сделать numbercut с результатом в int и накапливать число поразрядно так и сделаю
Можно int. Можно более широкий тип + учесть знаковость/беззнаковость и при подсчете проверять на переполнение.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967886
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int numbercut(char *source, char *str_result, int result[]);
source - исходная строка
str_result - строка, в которую копируются числа после запятой
result - массив из чисел после запятых

функция возвращает сумму чисел после запятых
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967888
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вам всем делать нечего. Вашу бы энергию да в мирное русло. Проект какой на кикстартере организовать, так ведь нет же.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967901
нате вот, развивайтесь
Код: 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.
# Функция               Пояснение
strlen(имя_строки)      определяет длину указанной строки, без учёта нуль-символа
// Копирование строк
strcpy(s1,s2)           выполняет побайтное копирование символов из строки  s2 в строку s1
strncpy(s1,s2, n)       выполняет побайтное копирование n символов из строки  s2 в строку s1. возвращает значения s1
// Конкатенация строк
strcat(s1,s2)           объединяет строку s2 со строкой s1. Результат сохраняется в s1
strncat(s1,s2,n)        объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1
// Сравнение строк
strcmp(s1,s2)           сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0  — если s1>s2 С учётом регистра
strncmp(s1,s2,n)        сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0  — если s1>s2 С учётом регистра
stricmp(s1,s2)          сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0  — если s1>s2 Без учёта регистра
strnicmp(s1,s2,n)       сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0 — если s1>s2 Без учёта регистра
// Обработка символов
isalnum(c)              возвращает значение true, если с является буквой или цифрой, и false в других случаях
isalpha(c)              возвращает значение true, если с является буквой, и false в других случаях
isdigit(c)              возвращает значение true, если с является цифрой, и false в других случаях
islower(c)              возвращает значение true, если с является буквой нижнего регистра, и false в других случаях
isupper(c)              возвращает значение true, если с является буквой верхнего регистра, и false в других случаях
isspace(c)              возвращает значение true, если с является пробелом, и false в других случаях
toupper(c)              если символ с, является символом нижнего регистра, то функция возвращает преобразованный символ с в верхнем регистре, иначе символ возвращается без изменений.
// Функции поиска
strchr(s,c)             поиск 1-го вхождения символа с в строке s. В случае удачного поиска возвращает *ptr на место 1-го вхождения символа с. Если символ не найден, то возвращается 0.
strcspn(s1,s2)          определяет длину начального сегмента строки s1, содержащего те символы, которые не входят в строку s2
strspn(s1,s2)           возвращает длину начального сегмента строки s1, содержащего только те символы, которые входят в строку s2
strprbk(s1,s2)          Возвращает указатель  первого вхождения любого символа строки s2 в строке s1
// Функции преобразования
atof(s1)                преобразует строку s1 в тип double
atoi(s1)                преобразует строку s1 в тип int
atol(s1)                преобразует строку s1 в тип long int
// Функции стандартной библиотеки ввода/вывода <stdio>
getchar(с)              считывает символ с со стандартного потока ввода, возвращает символ в формате int
gets(s)                 считывает поток символов со стандартного устройства ввода в строку s до тех пор, пока не будет нажата клавиша ENTER
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967904
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andron81и мне казалось, что даже после result++
тоже result,6 должен выглядеть как "1\0\0\0\0\0"

Это тебе казалось. Сделай уже как рекомендуется всем начинающим: выполни программу
самостоятельно, используя мозг вместо процессора и бумажку с ручкой вместо ОЗУ.


я понял . я все же не донимал как работает арифметика указателей.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void test(const char* s1)
{
    printf("%c\n", s1[0]); //a
    printf("%c\n", s1[1]); //b
    printf("%c\n", s1[2]); //c
    s1++;
    printf("%c\n", s1[0]); //b
    printf("%c\n", s1[1]); //c
    printf("%c\n", s1[2]); //d
    s1++;


}
int main() {
    char source[100] = "abcd,100";
    test(source);
}



то есть изначально
s1[0] = 'a'
s1[1])= 'b'
s1[2]) ='c'

а после s1++ уже имеем
s1[0] = 'b'
s1[1])= 'c'
s1[2]) ='d'
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967908
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код действительно рабочий. но я не допонимал кое-какие ньюансы.
теперь пробелы удалил.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967916
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Dimitry Sibiryakov

Код: plaintext
1.
         *result++ = *s1++;



Хех... признайся кодил под PDP ?
Неужели mov (r1)+,(r2)+?
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967951
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думал из топика выйдет koan.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967967
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я думал из топика выйдет koan.

Я погуглил это слово, но всё равно не понял, что вы имели в виду. :)
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39967974
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Я думал из топика выйдет koan.

Я погуглил это слово, но всё равно не понял, что вы имели в виду. :)

Вы были когда нибудь на языковых курсах? Из семейства ruby, python, scala, e.t.c.

Вобщем из этого семейства.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39968004
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Я погуглил это слово, но всё равно не понял, что вы имели в виду. :)

Вы были когда нибудь на языковых курсах? Из семейства ruby, python, scala, e.t.c.

Вобщем из этого семейства.

Нет. Но я изучал Питон и Хаскел. Но не добился приемлемых результатов.

Я так понял ваша идея-ожидание плохо формализуется (переводится в человеческий язык), поэтому вы не можете её описать.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39968009
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

Вы были когда нибудь на языковых курсах? Из семейства ruby, python, scala, e.t.c.

Вобщем из этого семейства.

Нет. Но я изучал Питон и Хаскел. Но не добился приемлемых результатов.

Я так понял ваша идея-ожидание плохо формализуется (переводится в человеческий язык), поэтому вы не можете её описать.

Я расскажу. Обычно курсы 5-10 дней. Разбиты на 2 части. Теория (первая половина дня) и практика.
Теория не особо интересна мне. Я обычно иду на курс когда уже примерно представляю себе суть.

А вот практика. Обычно (90% курсов что я был) выглядит так. Инструктор кидает всем ссылку на sourceforge
или bitbucket где лежат все практические занятия по курсу.

Все качают. И смотрят. Лаба представляет собой набор микро-тестов которые находятся в сломаном состоянии.
И их надо починить. От простого к сложному. Например в Lisp/Scala это начиная с базовых основ (атомы и списки)
и заканчивая чем-то более сложным.

Такие тесты называют коэн. Я понятие не имею что это значит. Что-то восточное связанное с трансом и медитацией.
Щас поясню суть на примере. Вот коэн на Лиспе. Ты смотришь. Сначала ни пса нипонятно. Потом... замечаешь что
тесты переходят в зеленый сегмент когда ты плейсхолдер ___ заменяешь на корректное значение.
Код: 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.
(define-test test-t-and-nil-are-opposites
    "not is a function which returns the boolean opposite of its argument"
   (true-or-false? ___ (not nil))
   (true-or-false? ___ (not t)))


(define-test test-nil-and-empty-list-are-the-same-thing
  (true-or-false? ___ ())
  (true-or-false? ___ (not ())))


(define-test test-lots-of-things-are-true
   " every value, other than nil, is boolean true"
   (true-or-false? ___ 5)
   (true-or-false? ___ (not 5))
   (true-or-false? ___ "A String")
   "only nil is nil.  Everything else is effectively true."
   "the empty string"
   (true-or-false? ___ "")
   "a list containing a nil"
   (true-or-false? ___ '(nil))
   "an array with no elements"
   (true-or-false? ___ (make-array '(0)))
   "the number zero"
   (true-or-false? ___ 0))



Весь процесс интерактивен. Обычно для коанов не нужна среда разработки. Достаточно самого интерпретатора ЯП
и любого тестового редактора типа Notepad.

Фиксишь. Наблюдаешь. Сначала тоска и уныние. И где-то минут через 30 тебя накрывает такое "медитативное"
состояние. Твой перформанс равен 200%. И далее тебе - по кайфу. Тебе - нравится. И вот в этот момент ты начинаешь
понимать идею языка программирования по крайней мере на том уровне как хотели ребята которые дизайнили
эти коэны.

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

Фиксишь. Наблюдаешь. Сначала тоска и уныние. И где-то минут через 30 тебя накрывает такое "медитативное"
состояние. Твой перформанс равен 200%. И далее тебе - по кайфу. Тебе - нравится. И вот в этот момент ты начинаешь
понимать идею языка программирования по крайней мере на том уровне как хотели ребята которые дизайнили
эти коэны.

Вот как-то так.

Понятно, но вряд ли нас накроет медиативно-душевное просветление (катарсис) от таких простых примеров. Хотя да, пару раз я переживал подобные чувства. Первый раз от Кернигана-Ритчи, а второй раз от Александреску. Но время удивления давно прошло. Сейчас наступил этап недовольства работой комитета по стандартизации.
...
Рейтинг: 0 / 0
вырезает число из строки после запятой
    #39968020
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. А в продуктовом коде обычно таких участков медитации мало. В микро-сервисном 90% кода - это взял-положил.
Дернул метод и посмотрел статус ошибки. Вообще в современной парадигме cloud-like development разработчик
собирает Lego конструктор из микро-блочков типа лямбда, key-value-базячка, mq-очередька и т.д.
...
Рейтинг: 0 / 0
79 сообщений из 79, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / вырезает число из строки после запятой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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