用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