C / C ++ строка для чтения одновременно

Я пытался решить проблему программирования какого-то сайта, и у этого было следующее утверждение:

Прочитайте строку и проанализируйте ее как число, символ ‘l’ может рассматриваться как число 1, а символы ‘o’ и ‘O’ могут рассматриваться как число 0, запятые и пробелы будут приниматься на входе, но игнорироваться, если таковые имеются другой символ найден, тогда выводится ошибка …

Итак … поскольку в строках могут быть пробелы, я использовал метод get (в документации сказано, что он удаляет новую строку и ставит терминатор) …

Моя последовательность проверки IF, если это число, то, если это приемлемая буква, то проверяет, не является ли она запятой или пробелом … И я обнаружил, что она почти всегда вводилась в последнем IF, хотя там не было любой символ, который должен привести его туда, поэтому я изменил printf внутри него, чтобы напечатать

 printf("%d error", st[k]);

И это выводит 13: возврат каретки … Я попробовал этот компилятор Вот

#include <cstdio>
#include <cstring>
#include <cstdlib>

int main()
{
char st[100];
char buf[100];
int k, i;

long long int num;

ops:     while(gets(st))
{
for(k = i = 0; st[k]; k++)
if(st[k] >= '0' && st[k] <= '9')
buf[i++] = st[k];
else if(st[k] == 'o' || st[k] == 'O')
buf[i++] = '0';
else if(st[k] == 'l')
buf[i++] = '1';
else if(st[k] != ',' && st[k] != ' ')
{
printf("error\n");
goto ops;
}
// remaining code comes here...

}

Входной образец имел следующие значения:

lo6
234657

Привет
,,,,, 5,, 5, 4

2200000000

00

Должен ли я использовать другую функцию для чтения вместо?

Любые предложения о том, как избежать этого проклятого возврата каретки?

Состояния для проблемы можно увидеть Вот если вы хотите больше деталей
Спасибо

РЕДАКТИРОВАТЬ:

Я спрашиваю об этом, потому что кажется, что есть разница между компилятором, который я использую, и компилятором, который использовал веб-сайт, когда я представил код, который не генерировал правильный вывод на моем, но я думал, что код был правильным. .. и это прошло. Затем, после этого, я попробовал код на виртуальной машине linux и тоже исправил, но мой gcc на windows потерпел неудачу … некоторые символы были совершенно не там, где они должны быть

Дело в том:

-2

Решение

Предпочтительный метод ввода строки getline, Если вы не знаете ширину ввода заранее, getline выделит место для вас, если вы установите указатель буфера на NULL,

Поскольку вы указываете, что у вас есть некоторый опыт работы с C, ниже будет показано, как пройти по входной строке и проанализировать ее так, как вы хотите. Хотя существует много способов обработки строк, трудно превзойти назначение указателя на начало строки и затем продвижение вниз по строке, пока вы не достигнете завершающего ноль символа (unsigned 0, или же char '\0'). Если у вас есть какие-либо вопросы после просмотра, просто спросите:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {

char *buffer = NULL;
size_t n = 0;
ssize_t len;
char *ptr = NULL;
char *output = NULL;
int idx = 0;

printf ("\nEnter your string below:     ([ctrl + d] on blank line to end)\n");

while ((len = getline (&buffer, &n, stdin)) != -1) {
ptr = buffer;
idx = 0;
output = malloc (sizeof (char) * len);

while (*ptr != 0) {
if (*ptr >= 48 && *ptr <= 57) output [idx++] = *ptr;
if (*ptr == 'I') output [idx++] = '1';
if (*ptr == 'o' || *ptr == 'O') output [idx++] = '0';
ptr++;
}

output [idx] = 0;

printf ("\n  valid output: %s\n\n", output);

free (output);
}return 0;
}

выход:

Enter your string below:     ([ctrl + d] on blank line to end)
This sting has 12345 aeiou AEIOU,,,,,commas, and 99, to end.

valid output: 123450100990
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector