В настоящее время я изучаю C с помощью книги «Программирование в 3-м издании» Стивена Г. Кочана.Функция replaceString() в C
Упражнение требует, чтобы я выполнял функцию, которая заменяет строку символов внутри символьной строки другой символьной строкой. Таким образом, вызов функции
replaceString(text, "1", "one");
Заменит, если есть, «1» в строку символов текста с «один».
Чтобы FULLFILL этого упражнения, вам нужны функции FindString(), insertString() и removeString().
Это функция FindString()
int findString (const char source[], const char s[])
{
int i, j;
bool foundit = false;
for (i = 0; source[i] != '\0' && !foundit; ++i)
{
foundit = true;
for (j = 0; s[j] != '\0' && foundit; ++j)
if (source[j + i] != s[j] || source[j + i] == '\0')
foundit = false;
if (foundit)
return i;
}
return -1;
}
Если с [] находится внутри источника строки [], он возвращает целое число, равное начальной точки для с [] внутри Струна. Если он не находит s [] он вернет -1.
Функция insertString() заключается в следующий
void insertString (char source[], char s[], int index)
{
int stringLength (char string[]);
int j, lenS, lenSource;
lenSource = stringLength (source);
lenS = stringLength (s);
if (index > lenSource)
return;
for (j = lenSource; j >= index; --j)
source[lenS + j] = source[j];
for (j = 0; j < lenS; ++j)
source[j + index] = s[j];
}
Эта функция принимает три аргумента т.е. источник [], сек [] и индекса []. s [] - это строка, которую я хотел бы поместить в источник [] и индекс [] - это то, где он должен начинаться (например, insertString («Сын», «per», 4) делает исходную строку «Человек»).
Функция включает в себя другую функцию, называемую stringLength(), цель которой при ее имени одинакова. Это StringLength()
int stringLength (char string[])
{
int count = 0;
while (string[count] != '\0')
++count;
return count;
}
removeString() принимает три аргумента т.е. слова, я и графа. Функция удаляет несколько символов внутри другой символьной строки. Эта функция я еще не смог сделать.
Просто, чтобы подвести итог, мой вопрос:
Как мне сделать функцию replaceString(), которая ищет слова в строке символов, и если она есть, то она заменяет его другой?
Это действительно беспокоило меня в течение некоторого времени, и я был бы очень признателен за вашу помощь в этом.
UPDATE
Это код, который я сделал до сих пор
// replaceString() program
#include <stdio.h>
#include <stdbool.h>
int findString (char source[], char s[])
{
int i, j;
bool foundit = false;
for (i = 0; source[i] != '\0' && !foundit; ++i)
{
foundit = true;
for (j = 0; s[j] != '\0' && foundit; ++j)
if (source[j + i] != s[j] || source[j + i] == '\0')
foundit = false;
if (foundit)
return i;
}
return -1;
}
int stringLength (char string[])
{
int count = 0;
while (string[count] != '\0')
++count;
return count;
}
void replaceString(char source[], char str1[], char str2[])
{
int findString(char source[], char s[]);
int stringLength(char string[]);
int start;
if (findString(source, str1) == -1)
return;
else
{
start = findString(source, str1);
int lenSource = stringLength(source);
int lenStr2 = stringLength(str2);
int counter = lenStr2;
for (lenSource; lenSource > start + lenStr2; --lenSource)
{
source[lenSource + lenStr2] = source[lenSource];
}
int i = 0;
while (i != counter)
{
source[start + i] = str2[i];
++i;
}
}
}
int main (void)
{
void replaceString(char source[], char str1[], char str2[]);
char string[] = "This is not a string";
char s1[] = "not";
char s2[] = "absolutely";
printf ("Before: \n %s \n\n", string);
replaceString(string, s1, s2);
printf ("After: \n %s \n\n", string);
return 0;
}
Этот код дает следующий результат:
До: Это не строка
После: Это абсолютно
Как вы можете видеть, я не включил функцию removeString(), так как я не мог нормально работать с этой функцией. Где ошибка в моей программе?
Почему бы вам не показать, что у вас есть до сих пор? – alk
Теперь я загрузил то, что сделал до сих пор. –
Не могли бы вы выработать 'removeString'? У меня были проблемы с этой простой функцией, когда я изменил ее, чтобы сначала найти нулевой символ (чтобы сделать его менее подверженным ошибкам). –