sulley 发表于 2020-4-28 20:42:55

小白请教一道C语言编程题

请编写一个程序,用一个单词替代给定字符串中的单词。在文本中使用”It is good to program in PASCAL language“ 中,用“C”将”PASCAL“替换掉。
(小白表示毫无思绪,望技术大牛多多指教!)

Richard149 发表于 2020-4-28 20:42:56

sulley 发表于 2020-4-28 22:15
void replace(char*, char*, char*) ”:无法将参数 264Project 7源.cpp从”const char ”转换为”c ...

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

#pragma warning( disable : 4996)
void replace(char *str, char *s, char *t)
{
        char temp, *p;
        int lens = strlen(s),
                lent = strlen(t);

        p = strstr(str, s);
        strcpy(temp, p + lens);
        strcpy(p, t);
        strcpy(p + lent, temp);
        }

        int main()
        {
                char s = "It is good to program in PASCAL language.";
                char * ss = "PASCAL";
                char * t = "C";

                replace(s, ss, t);
                puts(s);
                while (1);
        }

可以这样修改,应该是你的机器对于类型的检查比较严格。

ly落叶 发表于 2020-4-28 21:22:08

这个其实就是字符串匹配的问题,匹配到原字符串中指定子串,问题也就解决了,可以参考下算法教材上的KMP算法或者BM算法之类

sulley 发表于 2020-4-28 21:39:45

ly落叶 发表于 2020-4-28 21:22
这个其实就是字符串匹配的问题,匹配到原字符串中指定子串,问题也就解决了,可以参考下算法教材上的KMP算 ...

跪求大佬再指点指点,我还没有学到KMP和BM。刚才去搜索也是看得一头雾水。{:10_266:}
恕我愚钝,我还是不知道怎么敲代码2333

Qdb 发表于 2020-4-28 21:46:03

C语言的话用指针变量存储该字符串,然后用while语句对指针地址自加进行解引用,检测到当前地址内容为‘\0’或‘\n’即退出循环,然后在循环中进行判断,记录首字母和末字母的地址,然后将该地址的值进行替换即可

Qdb 发表于 2020-4-28 21:47:32

python的话可以用字符串的内置函数replace()直接进行替换

sulley 发表于 2020-4-28 21:54:12

Qdb 发表于 2020-4-28 21:47
python的话可以用字符串的内置函数replace()直接进行替换

戳中痛点!奈何是要使用C语言,暴风哭泣{:10_266:}

sulley 发表于 2020-4-28 21:58:11

Qdb 发表于 2020-4-28 21:46
C语言的话用指针变量存储该字符串,然后用while语句对指针地址自加进行解引用,检测到当前地址内容为‘\0’ ...

大佬这是我后来改写的代码,可是运行结果报错了,你能帮忙看看错在哪儿了吗?
#include <stdio.h>
#include <string.h>
void replace(char *str, char *s, char *t)
{
    char temp, *p;
    int lens = strlen(s),
      lent = strlen(t);
      
    p = strstr(str, s);   
    strcpy(temp, p+lens);
    strcpy(p, t);         
    strcpy(p+lent, temp);   
      
int main()
{
    char s = "It is good to program in PASCAL language.";
      
    replace(s, "PASCAL", "C");
    puts(s);
}

Richard149 发表于 2020-4-28 22:03:49

sulley 发表于 2020-4-28 21:58
大佬这是我后来改写的代码,可是运行结果报错了,你能帮忙看看错在哪儿了吗?

replace()函数没有结束的大括号    }

Richard149 发表于 2020-4-28 22:10:41

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

#pragma warning( disable : 4996)
void replace(char *str, char *s, char *t)
{
        char temp, *p;
        int lens = strlen(s),
                lent = strlen(t);

        p = strstr(str, s);
        strcpy(temp, p + lens);
        strcpy(p, t);
        strcpy(p + lent, temp);
        }

        int main()
        {
                char s = "It is good to program in PASCAL language.";

                replace(s, "PASCAL", "C");
                puts(s);
                while (1);
        }

用你给的程序,稍微改动一下,完全是可以的

sulley 发表于 2020-4-28 22:15:46

Richard149 发表于 2020-4-28 22:10
#include
#include



void replace(char*, char*, char*) ”:无法将参数 264Project 7源.cpp从”const char ”转换为”char*”
请问这个该怎么解决

Richard149 发表于 2020-4-28 22:34:34

sulley 发表于 2020-4-28 22:15
void replace(char*, char*, char*) ”:无法将参数 264Project 7源.cpp从”const char ”转换为”c ...

你是运行哪个代码出现的这个错误;

Richard149 发表于 2020-4-28 22:36:38

C:\Users\Richard\Desktop\Shell\捕获.PNG

sulley 发表于 2020-4-28 22:43:03

Richard149 发表于 2020-4-28 22:40
可以这样修改,应该是你的机器对于类型的检查比较严格。

可是系统还是会这样报错{:10_266:}我用的是VS2019
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2440        “初始化”: 无法从“const char ”转换为“char *”        Project7        C:\Users\lenovo\source\repos\Project7\Project7\源.cpp        20       

sulley 发表于 2020-4-28 23:57:12

Richard149 发表于 2020-4-28 22:40
可以这样修改,应该是你的机器对于类型的检查比较严格。

非常感谢你今天的热心帮助!感谢感谢感谢!今天遇到的问题大多和我的软件要求你较高。总之十分感谢你的帮助啊!

Qdb 发表于 2020-4-30 11:51:50

sulley 发表于 2020-4-28 21:58
大佬这是我后来改写的代码,可是运行结果报错了,你能帮忙看看错在哪儿了吗?

第十二行后少了个}
页: [1]
查看完整版本: 小白请教一道C语言编程题