Получить суффиксы в C - PullRequest
       29

Получить суффиксы в C

1 голос
/ 28 марта 2020

Я пытаюсь получить суффиксы введенной строки, но я получаю префиксы, как мне сделать, чтобы исправить это?

Ожидаемый результат, например, со строкой ввода "Hello": :

Hello 
ello
ell
el
e

Сейчас возвращается:

Hello
Hell
Hel
He
H

Спасибо

#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **suffix;

void panic(char *m) {
  fprintf(stderr, "%s\n", m);
  exit(0);
}

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

  if (argc != 2)
    panic("wrong parameters");

  n = strlen(argv[1]);

  suffix = (char **)malloc(n * sizeof(char *));

  if (suffix == NULL)
    error("Memoria no disponible");

  for (i = 0; i < n; ++i) {
    suffix[i] = (char *)malloc((n + 1 - i) * sizeof(char));
    if (suffix[i] == NULL)
      error("Memoria no disponible");

    sprintf(suffix[i], "%s", argv[1]);
    argv[1][n - 1 - i] = '\0';
  }

  for (i = 0; i < n; i++) {
    printf("%d %s\n", i, suffix[i]);
  }

  return 0;
}

Ответы [ 3 ]

3 голосов
/ 28 марта 2020

Просто замените эти два утверждения

sprintf(suffix[i], "%s", argv[1]);
argv[1][n - 1 - i] = '\0';

на это одно утверждение

sprintf(suffix[i], "%s", argv[1] + i );
2 голосов
/ 28 марта 2020

Используйте ответ Влада из Москвы.

Что-то связанное с тем, что вам нужно сейчас, только читайте argc и argv, никогда не перезаписывайте их. Хотя теоретически вы можете сделать это, на практике это бесполезно и опасно.

1 голос
/ 28 марта 2020

Следует всегда сохранять код / ​​лог c настолько простым, насколько вы можете.

Следующий предложенный код можно остановить с помощью <ctrl-c> и / или EOF

#include <stdio.h>
#include <string.h>

int main( void )
{
    char buffer[ 256 ];

    // get the string
    while( fgets( buffer, sizeof( buffer ), stdin ) )
    {
        //output string, dropping leading char at each loop iteration
        size_t length = strlen( buffer );

        for( size_t i=0; i<length; i++ )
        {
            printf( "%s\n", &buffer[i] );
        }
    }
}

вот типичный запуск программы:

Примечание: первая строка от пользователя, вводящего строку.

this is a string
this is a string

his is a string

is is a string

s is a string

 is a string

is a string

s a string

 a string

a string

 string

string

tring

ring

ing

ng

g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...