Как заменить один символ в одной строке на другую строку?

#c

#c

Вопрос:

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

например, ниже хотелось бы изменить строку ‘И’ на ‘ANDSPACETHE’, в настоящее время выводя ‘ANDSPACE’ с помощью strstr() . В идеале это может работать несколько раз в одной и той же строке, например, ‘AND THE CAT’ —> ‘ANDSPACETHESPACECAT’

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


int main ()
{
  char str[30] ="AND THE";
  char * pch;
  pch = strstr(str," ");
  if (pch != NULL){
    strncpy (pch,"SPACE",6);
  }
  printf("%sn",str);
  return 0;
}
OUTPUT = ANDSPACE
DESIREDOUTPUT = ANDSPACETHE
 

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

1. strncpy просто копирует строку. Перед копированием строки вам нужно освободить место, переместив остальную часть строки дальше, возможно, с помощью memmove функции. Здесь могут пригодиться лист бумаги и карандаш.

2. man memcpy , man memmove

3. Это зависит от того, что вы делаете со строкой. Возможно, вы захотите рассмотреть fmemopen

Ответ №1:

Вы могли бы начать с чего-то вроде этого:

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

int main()
{
  char str[30] = "AND THE";
  char strtoinsert[] = "SPACE";

  char* pch = strstr(str, " ");
  if (pch != NULL) {
    // move remaining part of string further in order to make room
    memmove(pch   strlen(strtoinsert), pch   1, strlen(pch));

    // copy the string to insert
    memcpy(pch, strtoinsert, strlen(strtoinsert));             
  }

  printf("%sn", str);
  return 0;
}
 

Это заменит первый встреченный пробел. С этой базой вы должны быть в состоянии выяснить, как заменить все пробелы в строке.

Подсказка 1: повторяйте все это до тех пор, пока не останется свободного места.

Подсказка 2: если строка для вставки содержит пробелы, то это немного сложнее, поскольку вы не можете применить просто подсказку 1.

Подсказка 3: если вы хотите заменить не только один символ, но и целое слово, это тоже не сработает, вы должны быть в состоянии понять это.