В C проверьте смещение в символьной строке и посчитайте количество байтов - PullRequest
1 голос
/ 13 февраля 2012

Дополнительная помощь по моему заданию, о которой я спрашивал ранее. После прочтения символьной строки из стандартного ввода, он проверяет наличие любых символов, отличных от ascii. Все, что он найдет, будет отображать его значение в шестнадцатеричном формате и нулевое смещение. Я получил это для отображения шестнадцатеричного просто отлично, но мне трудно понять, как отобразить смещение. Это мой текущий код для того, чтобы задавать этот вопрос, показывая только соответствующие строки.

#define MASK 0x80

auto int inChar;

if ((inChar & MASK) == MASK)
{
    printf("NON-ASCII INPUT: %x detected at offset %#x \n", inChar, inChar);
    nonascii = 1;
}

Есть еще одна вещь, с которой мне нужна помощь, надеюсь, на это будет легче ответить. Если строка чтения не имеет ничего, кроме ASCII, она должна быть записана как таковая и отображать общее количество прочитанных байтов. Я знаю, как сделать это с помощью целых чисел и умножения, просто посчитав, сколько раз это делается, но профессор, похоже, хочет, чтобы мы делали это более прямым образом.

Это мой код на момент написания.

if (nonascii == 0)
    printf("The input stream was pure ASCII with a total of %d bytes read", (numBytes &= inChar));

Большое спасибо тем, кто мне в этом помогает.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2012

inChar содержит значение прочитанного символа;он не несет информацию о том, где в строке находится символ, поэтому невозможно определить смещение из этой переменной.

Место, куда нужно смотреть, где бы вы ни заполнили inChar с текущим персонажем;к сожалению, мы не видим эту часть кода.Скорее всего, в этот момент вы извлекаете значение из определенного индекса в строке, и вам просто нужно использовать ту же самую переменную индекса для отображения смещения.Другая возможность заключается в том, что вы извлекаете значение из строки, перемещая указатель внутри строки.В этом случае способ извлечь смещение с помощью арифметики указателя : скажем, у вас есть указатель string , указывающий на начало строки и stringIter который указывает на обрабатываемый в данный момент символ, а затем, глядя на то, как далеко указатели расположены друг от друга, подскажет вам ваше смещение в строке: stringIter - string .

1 голос
/ 13 февраля 2012

inChar - это символ, а не смещение.Смещение означает индекс массива, в котором символ был найден в строке, и вы, вероятно, должны распечатать его как десятичное с использованием средства форматирования% d.

Самый простой способ отобразить длину строки - использовать функцию strlen (),Но если вам не разрешено использовать это, тогда длина строки равна индексу массива + 1, когда вы выпадаете из цикла.

...