c синтаксис строки печати - PullRequest
1 голос
/ 08 января 2011

Просто застрял на синтаксисе c в отношении строк.

Скажем, у меня есть строка типа (name[5]="peter";) в c, если я просто хочу напечатать последний символ строки или проверить последний символ строки, который в этом случае будет 'r' какя могу это сделать?

То, как я думал, похоже, не работает

name[5]="peter";
if(name[5]=="r") printf("last character of name is r");

Вопрос: есть ли какая-то функция для этого, которая может проверять один символ массива, это определенное значение, напримеримя [5] равно 'r' в строке peter или аналогично имя [1] равно 'n'

Также, как мне использовать printf для печати этого определенного символа, возникают проблемы с использованием

printf("last character of name is %s",name[5]) ???

Спасибо

Ответы [ 4 ]

4 голосов
/ 08 января 2011

Во-первых, строки заканчиваются нулем.Для строки из пяти символов вам нужно выделить массив из 6 символов для обработки символа '\0' в конце строки.

char name[6] = "peter";
// peter is {'p', 'e', 't', 'e', 'r', '\0'}

Чтобы проверить, какие отдельные символы есть, проиндексируйте строку с помощью квадратаскобки.Первый символ - это индекс 0, второй - это индекс 1 и т. Д. Кроме того, C различает строки и отдельные символы.Строка написана с "double quotes".Символы пишутся в одинарных кавычках: 'r'.

if (name[4] == 'r') {
    printf("fifth character of name is r\n");
}

Чтобы найти последний символ, вам нужно знать длину строки.Если вы знаете длину заранее, вы можете жестко ее кодировать;в противном случае используйте функцию strlen для вычисления длины строки.А затем вычтите 1, потому что индексы основаны на 0.

if (name[strlen(name) - 1] == 'r') {
    printf("last  character of name is r\n");
}

Для печати отдельных символов с printf вы можете использовать спецификатор формата %c.%c печатает один символ.

printf("fifth character of name is %c\n", name[4]);
printf("last  character of name is %c\n", name[strlen(name) - 1]);
1 голос
/ 08 января 2011

Ваша проблема в том, что строки в C заканчиваются нулем.Это означает, что они заканчиваются символом '\0'.Вы должны сэкономить место для этого.Кроме того, массивы индексируются из 0, поэтому name[5] указывает строку с 4 символами и нулевым символом с нулевым символом в индексе 4 из name.

Вам необходимо исправить это:

char name[6]="peter";

теперь:

name[0] = 'p'
name[1] = 'e'
...
name[4] = 'r'
name[5] = 0

Таким образом, ваш оператор if должен использовать индекс 4, а не 5:

if(name[4]=="r") printf("last character of name is r");

Наконец, для печати одного символа, используйте модификатор th %c, а не %s.Ваш конечный printf должен выглядеть следующим образом:

printf («последний символ имени% c», имя [4])

В противном случае вы печатаете строку, которая начинается от указанного вами смещения, которое (если вы выделите достаточно места в вашей строке) будет '\0', что является пустой строкой.

1 голос
/ 08 января 2011

Я думаю, вы хотите это:

char *s = "peter";
char lastChar = s[strlen(s) - 1];
printf("last character in s is %c\n", lastChar);
0 голосов
/ 08 января 2011

Здесь есть две большие проблемы:

  • Первый - это длина строки
  • Второй - индекс string.

Length

В C строки заканчиваются на NULL, что означает, что они имеют невидимый \0 в конце, обозначающий конец строки.Вы должны учитывать этот невидимый характер, поэтому, хотя peter составляет всего 5 букв, вам нужно еще один пробел для нулевого терминатора.

char name[6]="peter";  /* implied \0 at the end of the string */

Индекс

ВC, строки и массивы индексируются 0, что означает, что первым элементом является [0].В случае вашей строки индексы:

[0] `p`
[1] `e`
[2] `t`
[3] `e`
[4] `r`
[5] `\0`

Так что, если вы ожидаете, что r будет 5-м символом, он будет иметь индекс 4 .

* 1030.* Если вы объявите строку правильно (с 6 элементами вместо 5) и посмотрите на индекс [4], вы обнаружите, что это r, как и ожидалось.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...