Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C替换一个单词_C_String_Strtok - Fatal编程技术网

用C替换一个单词

用C替换一个单词,c,string,strtok,C,String,Strtok,你能给我一些建议吗?我有一个文件中的字符串。当我在控制台上看到字符串时,我需要写下要更改的单词,并将结果输出到另一个文件中。例如:“你好,我的女孩”这个词我想把“女孩”改成另一个词“男孩”。我可以用图书馆 你能给我建议一下帮助我修改单词的算法吗 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char my_string[256]; cha

你能给我一些建议吗?我有一个文件中的字符串。当我在控制台上看到字符串时,我需要写下要更改的单词,并将结果输出到另一个文件中。例如:“你好,我的女孩”这个词我想把“女孩”改成另一个词“男孩”。我可以用图书馆 你能给我建议一下帮助我修改单词的算法吗

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

int main()
 {



    char my_string[256];
    char* ptr;

    FILE *f;
     if ((f = fopen("test.txt", "r"))==NULL) {
     printf("Cannot open  test file.\n");
     exit(1);}

    FILE *out;
    if((out=fopen("result.txt","w"))==NULL){
        printf("ERROR\n");
        exit(1);
    }

    fgets (my_string,256,f);


    printf ("result: %s\n",my_string);
    ptr = strtok (my_string," ");


   while (ptr != NULL)
   {
      printf ("%s \n",ptr);
      ptr = strtok (NULL," ");
   }

   char old_word [10];
   char new_word [10];
   char* ptr_old;
   char* ptr_new;

    printf ("Enter your old word:\n");
    ptr_old= gets (old_word);
    printf ("Your old word:%s\n",old_word);

    printf ("Enter new old word:\n");
    ptr_new = gets (new_word);
    printf ("Your new word:%s\n",new_word);



    fclose(f);
    fclose(out);

    return 0;
 }
#包括
#包括
#包括
int main()
{
char my_字符串[256];
char*ptr;
文件*f;
if((f=fopen(“test.txt”,“r”))==NULL){
printf(“无法打开测试文件。\n”);
退出(1);}
归档;
if((out=fopen(“result.txt”,“w”))==NULL){
printf(“错误\n”);
出口(1);
}
fgets(my_字符串,256,f);
printf(“结果:%s\n”,我的字符串);
ptr=strtok(我的字符串“”);
while(ptr!=NULL)
{
printf(“%s\n”,ptr);
ptr=strtok(空,“”);
}
charold_单词[10];
char新词[10];
char*ptr_old;
char*ptr_new;
printf(“输入旧单词:\n”);
ptr_old=get(old_word);
printf(“您的旧单词:%s\n”,旧单词);
printf(“输入新旧单词:\n”);
ptr_new=get(新单词);
printf(“您的新词:%s\n”,新词);
fclose(f);
fclose(out);
返回0;
}

我试着把输入的字符串拆分成单词。现在它的死胡同了。

此代码将帮助您。运行时必须通过4个参数

./a.out“oldword”“newword”“文件名从中取出旧单词”“文件名复制到何处”

$./a.out girl boy test.txt result.txt

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

int main(int args, char *argv[4])
{
    FILE *f1;
    FILE *f2;
    char *strings=0;
    char *newstrings=0;
    char *token=NULL;
    strings=(char *)malloc(1000);
    newstrings=(char *)malloc(1000);

    if((strings==NULL)||(newstrings==NULL))
    {
        printf("Memory allocation was not successfull.");
        return 0;
    }

    if(args<4)
    {
        puts("Error: Not enough input parameters");
        puts("Usage: ./change <oldword> <newword> <infile> <newfile>");
        return 0;

    }

    f1=fopen(argv[3],"r");
    f2=fopen(argv[4],"w");
    if(f1==NULL)
    {
        puts("No such file exists");
        return 0;
    }
    while(fgets(strings,1000,f1)!=NULL)
    {
        if(strstr(strings,argv[1])!=NULL)
        {
            token=strtok(strings,"\n\t ");
            while(token!=NULL)
                {
                   if(strcmp(token,argv[1])==0)
                    {
                        strcat(newstrings,argv[2]);
                        strcat(newstrings," ");
                    }
                    else
                    {
                        strcat(newstrings,token);
                        strcat(newstrings," ");
                    }
                    token=strtok(NULL,"\n\t ");
                }
        }
        else
        {
            strcpy(newstrings,strings);
        }
        fputs(newstrings,f2);
    }
    free(strings);
    free(newstrings);
    printf("New file <%s> generated!\n",argv[4]);

    fclose(f1);
    fclose(f2);
    return 0;
}
#包括
#包括
#包括
int main(int args,char*argv[4])
{
文件*f1;
文件*f2;
char*strings=0;
char*newstrings=0;
char*token=NULL;
字符串=(char*)malloc(1000);
新闻字符串=(字符*)malloc(1000);
if((strings==NULL)| |(newstrings==NULL))
{
printf(“内存分配未成功”);
返回0;
}

if(args此代码将帮助您。您必须在运行时通过4个args

./a.out“oldword”“newword”“文件名从中取出旧单词”“文件名复制到何处”

$./a.out girl boy test.txt result.txt

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

int main(int args, char *argv[4])
{
    FILE *f1;
    FILE *f2;
    char *strings=0;
    char *newstrings=0;
    char *token=NULL;
    strings=(char *)malloc(1000);
    newstrings=(char *)malloc(1000);

    if((strings==NULL)||(newstrings==NULL))
    {
        printf("Memory allocation was not successfull.");
        return 0;
    }

    if(args<4)
    {
        puts("Error: Not enough input parameters");
        puts("Usage: ./change <oldword> <newword> <infile> <newfile>");
        return 0;

    }

    f1=fopen(argv[3],"r");
    f2=fopen(argv[4],"w");
    if(f1==NULL)
    {
        puts("No such file exists");
        return 0;
    }
    while(fgets(strings,1000,f1)!=NULL)
    {
        if(strstr(strings,argv[1])!=NULL)
        {
            token=strtok(strings,"\n\t ");
            while(token!=NULL)
                {
                   if(strcmp(token,argv[1])==0)
                    {
                        strcat(newstrings,argv[2]);
                        strcat(newstrings," ");
                    }
                    else
                    {
                        strcat(newstrings,token);
                        strcat(newstrings," ");
                    }
                    token=strtok(NULL,"\n\t ");
                }
        }
        else
        {
            strcpy(newstrings,strings);
        }
        fputs(newstrings,f2);
    }
    free(strings);
    free(newstrings);
    printf("New file <%s> generated!\n",argv[4]);

    fclose(f1);
    fclose(f2);
    return 0;
}
#包括
#包括
#包括
int main(int args,char*argv[4])
{
文件*f1;
文件*f2;
char*strings=0;
char*newstrings=0;
char*token=NULL;
字符串=(char*)malloc(1000);
新闻字符串=(字符*)malloc(1000);
if((strings==NULL)| |(newstrings==NULL))
{
printf(“内存分配未成功”);
返回0;
}

如果(args,您可以使用如下演示程序中所示的函数

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

char * replace(const char *s, const char *src, const char *dsn)
{
    size_t n = 0;
    size_t src_len = strlen(src);
    size_t dsn_len = strlen(dsn);

    for (const char *p = s; (p = strstr(p, src)) != NULL; p += src_len)
    {
        n++;
    }

    char *result = malloc(strlen(s) + n * (src_len - dsn_len) + 1);

    const char *p = s;
    char *t = result;

    if (n != 0)
    {
        for (const char *q; (q = strstr(p, src)) != NULL; p = q + src_len)
        {
            memcpy(t, p, q - p);
            t += q - p;
            memcpy(t, dsn, dsn_len);
            t += dsn_len;
        }
    }

    strcpy(t, p);

    return result;
}

int main( void )
{
    char s[] = " the girl and boy are relatives";

    char *p = replace(s, "girl", "boy");

    puts(s);
    puts(p);

    free(p);
}

您可以使用如下演示程序中所示的函数

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

char * replace(const char *s, const char *src, const char *dsn)
{
    size_t n = 0;
    size_t src_len = strlen(src);
    size_t dsn_len = strlen(dsn);

    for (const char *p = s; (p = strstr(p, src)) != NULL; p += src_len)
    {
        n++;
    }

    char *result = malloc(strlen(s) + n * (src_len - dsn_len) + 1);

    const char *p = s;
    char *t = result;

    if (n != 0)
    {
        for (const char *q; (q = strstr(p, src)) != NULL; p = q + src_len)
        {
            memcpy(t, p, q - p);
            t += q - p;
            memcpy(t, dsn, dsn_len);
            t += dsn_len;
        }
    }

    strcpy(t, p);

    return result;
}

int main( void )
{
    char s[] = " the girl and boy are relatives";

    char *p = replace(s, "girl", "boy");

    puts(s);
    puts(p);

    free(p);
}
#包括
#包括
int main()
{
字符文件路径[40]={0},stf[255]={0},rtf[255]={0},str[255]={0};
FILE*FILE=NULL;
文件*e_f;
如果((e_f=fopen(“result.txt”,“w”))==NULL){
printf(“错误\n”);
出口(1);
}
做
{
printf(“输入文件路径:”);
fgets(文件路径,40,标准格式);
文件路径[strlen(文件路径)-1]='\0';
file=fopen(文件路径,“r+”);
}
while(file==NULL);
printf(“输入要查找的文本:”);
fgets(标准测试基金,255,标准测试日);
stf[strlen(stf)-1]='\0';
printf(“输入要替换的文本:”);
fgets(rtf、255、标准DIN);
rtf[strlen(rtf)-1]='\0';
while(fgets(str,255,file)!=NULL)
{
char*tmp_ptr=strstrstr(str,stf);
while(tmp_ptr!=NULL)
{
char tmp_str[255];
strcpy(tmp_str,tmp_ptr+strlen(stf));
strcpy(str+strlen(str)-strlen(tmp_ptr),rtf);
strcat(str,tmp_str);
tmp_ptr=strstrstr(str,stf);
}
printf(“%s”,str);
}
fclose(文件);
fclose(e_f);
返回0;
}
这就是我需要的。谢谢大家的帮助!

\include
#包括
int main()
{
字符文件路径[40]={0},stf[255]={0},rtf[255]={0},str[255]={0};
FILE*FILE=NULL;
文件*e_f;
如果((e_f=fopen(“result.txt”,“w”))==NULL){
printf(“错误\n”);
出口(1);
}
做
{
printf(“输入文件路径:”);
fgets(文件路径,40,标准格式);
文件路径[strlen(文件路径)-1]='\0';
file=fopen(文件路径,“r+”);
}
while(file==NULL);
printf(“输入要查找的文本:”);
fgets(标准测试基金,255,标准测试日);
stf[strlen(stf)-1]='\0';
printf(“输入要替换的文本:”);
fgets(rtf、255、标准DIN);
rtf[strlen(rtf)-1]='\0';
while(fgets(str,255,file)!=NULL)
{
char*tmp_ptr=strstrstr(str,stf);
while(tmp_ptr!=NULL)
{
char tmp_str[255];
strcpy(tmp_str,tmp_ptr+strlen(stf));
strcpy(str+strlen(str)-strlen(tmp_ptr),rtf);
strcat(str,tmp_str);
tmp_ptr=strstrstr(str,stf);
}
printf(“%s”,str);
}
fclose(文件);
fclose(e_f);
返回0;
}
这就是我需要的。谢谢大家的帮助!

我做了一个功能:

#include <stdio.h>
#include <string.h>
#define MAX 50

void Change (char x[], char cx, char nu){
int i;

for(i=0;i<strlen(x);i++) {
 if (x[i]==cx){
   x[i] = nu;
    }
  }
}


int main () {

char str[MAX];
char ch;
char new;


printf("Insert the string\n");
scanf("%s",str);

printf("Insert the word that you want to change\n");
scanf(" %c",&ch);

printf("the new word\n");
scanf(" %c",&new);


Change(str, ch, new);

printf("The new word is %s\n",str );

return 0;
}
#包括
#包括
#定义最大值50
无效更改(字符x[],字符cx,字符nu){
int i;
对于(i=0;i我做了一个函数:

#include <stdio.h>
#include <string.h>
#define MAX 50

void Change (char x[], char cx, char nu){
int i;

for(i=0;i<strlen(x);i++) {
 if (x[i]==cx){
   x[i] = nu;
    }
  }
}


int main () {

char str[MAX];
char ch;
char new;


printf("Insert the string\n");
scanf("%s",str);

printf("Insert the word that you want to change\n");
scanf(" %c",&ch);

printf("the new word\n");
scanf(" %c",&new);


Change(str, ch, new);

printf("The new word is %s\n",str );

return 0;
}
#包括
#包括
#定义最大值50
无效更改(字符x[],字符cx,字符nu){
int i;

对于(i=0;这并不太糟糕,但您必须首先要求替换单词,然后将
ptr
与您要查找的单词进行比较,最后您必须
fprintf
,而不是
printf
。在标记字符串时,将每个结果单词与“girl”进行比较。如果匹配,则将fprintf与“boy”进行比较到result.txt,否则为fprintf单词。一定要根据需要添加空格。“girl”和“boy”就是一个例子。我的字符串可以由不同的wrod组成。看。我需要询问旧单词和新单词,所以我想,我应该为一个和另一个单词创建两个指针。然后更改它们并在我的主“ptr”中写入请注意,我已编辑了代码。请检查此项不太糟糕,但您必须首先要求替换该单词,然后将
ptr
与您要查找的单词进行比较,最后您必须
fprintf
,而不是
printf