Печать строк без учета первых N символов

#c #string #format #printf

#c #строка #формат #printf

Вопрос:

Я хочу напечатать свою строку, которая является «Чем-то», без первых N букв внутри printf инструкции.

Пример 1: я могу сделать «наоборот» ( printf только N первых букв):

 #include <stdio.h>
int main() {
  char str[] = "Something";
  printf("%5s", str);
}
  

Вывод: Somet

Ожидаемый результат: hing

Ответ №1:

Начните печать с середины:

 printf("%s", amp;str[5]);
  

Комментарии:

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

Ответ №2:

Вы могли бы попробовать использовать арифметику указателя, чтобы передать адрес начальной точки в строке, с которой вы хотите начать печать. В более общем контексте вам нужно будет каким-то образом проверить, что количество пропускаемых символов меньше общей длины основной строки.

 #include<stdio.h>
int main()
{
    char str[]="Something";
    int numCharsToSkip = 5;

    printf("%s", (str   numCharsToSkip));
}
  

Ответ №3:

Есть много способов выбрать, с чего начать печать в буфере. Одна потенциально полезная функция, strchr(const char *buf, char ch), возвращает указатель на первое вхождение char ch. Итак, если вы хотите начать печать с буквы h , то вызывайте strchr() таким образом:

Для ожидаемого результата hing используйте:

 char str[]="Something";
printf("%s", strchr(str, 'h'); 
  

Или, для ожидаемого результата omething , используйте:

 printf("%s", strchr(str, 'o'); 
  

Еще одна полезная функция: strstr(const char *source, const char *search) возвращает указатель на любую подстроку, поиск, существующую в буфере источника, поэтому она также полезна, если вы хотите начать печать с определенного слова в буфере большего размера, например, с учетом:

 char longerStr[] = "This is really something else";
char *token = strstr(longerStr, "thing");
if(token)    //test before using to prevent trying to print a nul pointer in the event
{            //"thing" is not found in buffer.
    printf("%s", token);//note using " ", not ' '
}