替换C

时间:2016-12-10 15:22:49

标签: c string strtok

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

#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;
 }

我试图将输入字符串分成单词。现在已经死了。

4 个答案:

答案 0 :(得分:2)

此代码可以帮助您。你必须在运行时传递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;
}

答案 1 :(得分:1)

您可以在下面的演示程序中使用类似所示功能的功能

#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);
}

程序输出

 the girl and boy are relatives
 the boy and boy are relatives

答案 2 :(得分:1)

{
  "rules": {
    ".read": "true",
    ".write": "auth != null"
  }
}

那是我需要的。谢谢大家的帮助!

答案 3 :(得分: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;
}