gpt4 book ai didi

c - C 语言中的replaceString()函数

转载 作者:行者123 更新时间:2023-11-30 17:45:37 26 4
gpt4 key购买 nike

我目前正在阅读 Stephen G. Kochan 所著的《C 语言编程第 3 版》一书来学习 C。

该练习要求我创建一个函数,将一个字符串中的一个字符串替换为另一个字符串。所以函数调用

replaceString(text, "1", "one");

将字符串text中的“1”替换为“one”(如果存在)。

要完成此练习,您需要函数 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[]在字符串source[]内部,则返回一个等于s[]内部起始点的整数字符串。如果没有找到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];
}

该函数采用三个参数,即 source[]s[]index[]s[] 是我想要放入 source[] 的字符串,index[] 是它应该开始的位置(例如 insertString( "The son", "per", 4) 使源字符串变为 "The person")。

该函数包含另一个名为stringLength()的函数,其用途与其名称相同。这是stringLength()

int stringLength (char string[])
{
int count = 0;

while ( string[count] != '\0' )
++count;

return count;
}

removeString() 采用三个参数,即 wordicount。该函数删除另一个字符串中的多个字符。这个功能我还没能做出来。

总而言之,我的问题是:

我如何创建函数replaceString(),它在字符串中查找单词,如果存在,则将其替换为另一个单词?

这确实困扰了我一段时间,我非常感谢您对此的帮助。

更新

这是我到目前为止所做的代码

// 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 function(),因为我无法使该函数正常工作。我的程序哪里出错了?

最佳答案

对于初学者来说,字符串的长度是固定的。所以如果“目的地”比“源”长,那么它就不起作用。 insert string需要传入一个指针,那么你可以在堆上分配一个足够长的字符串来包含length(source)-length(remove) + length(add),并返回该指针

关于c - C 语言中的replaceString()函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19570931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com