帮忙改下程序 这是我用两个程序合起来的 但是运行后有乱码 并且不能替换所有出现的字符。 在线等!!!! 70
5、文件处理:(1)统计各字母在文本文件中出现的频度(忽略大小写);(2)查找并替换正文中的字符串,并存入另一个文件中。#include<stdio.h>#include...
5、文件处理:
(1) 统计各字母在文本文件中出现的频度(忽略大小写);
(2) 查找并替换正文中的字符串,并存入另一个文件中。
#include<stdio.h>
#include<string.h>
#include <iostream.h>
#define MAX 100
/*---------*/
void detect(char b[])
{
char ch[MAX];/*记录出现的字符*/
int num[MAX]={0};/*记录每个字符出现的次数*/
int i,j,n=0;
for(i=0;b[i]!='\0';i++)
{
for(j=0;j<n;j++)
if(b[i]==ch[j]||(ch[j]>='a'&&ch[j]<='z'&&b[i]+32==ch[j])) break;/*判断该字符是否已经出现过*/
if(j<n)/*该字符出现过,对应的记数器num[j]加一*/
num[j]++;
else/*该字符是新出现的字符,记录到ch[j]中,对应计数器num[j]加一*/
{
if(b[i]>='A'&&b[i]<='Z')
ch[j]=b[i]+32;
else
ch[j]=b[i];
num[j]++;
n++;/*出现的字符的种类数加1*/
}
}
for(i=0;i<n;i++)/*输出*/
/*printf("\'%c\'出现了%d次\n",ch[i],num[i]);*/
cout<<ch[i]<<"出现了"<<num[i]<<"次\n";
}
/*---------------*/
void main()
{
int a[26],i,j;
char b[100],c[100],*p,flag,*q;
for(i=0;i<26;i++)
a[i]=0;
printf("Input a string:");
/*-------*/
while((b[i]=getchar())!='\n')/*输入*/
i++;
b[i]='\0';
detect(b);
/*-------*/
gets(b);
printf("Input the string you want to find:");
gets(c);
for(i=0;b[i];i++)
{
if(b[i]>='A'&&b[i]<='Z')
a[b[i]-65]++;
else if(b[i]>='a'&&b[i]<='z')
a[b[i]-97]++;
}
for(p=c,i=0;b[i];i++)
if(b[i]==*p)
{
p++;
continue;
}
else if(*p==0)
{
for(j=0;j<strlen(c);j++)
i--;
q=&b[i];
break;
}
else
p=c;
if(*p==0)
{
printf("Have find!\nDo you want to change it(y or n):");
flag=getchar();
fflush(stdin);
if(flag=='y'||flag=='Y')
{
printf("Change it with:");
gets(c);
for(p=c;*p;p++,q++)
*q=*p;
}
}
printf("After change:");
puts(b);
printf("\n");
for(i=0;i<26;i++)
printf("%d ",a[i]);
getchar();
}
其实就是输入几个字母,然后查找 替换 比如输入 homehome 查找h换成b然后就是bomebome 展开
(1) 统计各字母在文本文件中出现的频度(忽略大小写);
(2) 查找并替换正文中的字符串,并存入另一个文件中。
#include<stdio.h>
#include<string.h>
#include <iostream.h>
#define MAX 100
/*---------*/
void detect(char b[])
{
char ch[MAX];/*记录出现的字符*/
int num[MAX]={0};/*记录每个字符出现的次数*/
int i,j,n=0;
for(i=0;b[i]!='\0';i++)
{
for(j=0;j<n;j++)
if(b[i]==ch[j]||(ch[j]>='a'&&ch[j]<='z'&&b[i]+32==ch[j])) break;/*判断该字符是否已经出现过*/
if(j<n)/*该字符出现过,对应的记数器num[j]加一*/
num[j]++;
else/*该字符是新出现的字符,记录到ch[j]中,对应计数器num[j]加一*/
{
if(b[i]>='A'&&b[i]<='Z')
ch[j]=b[i]+32;
else
ch[j]=b[i];
num[j]++;
n++;/*出现的字符的种类数加1*/
}
}
for(i=0;i<n;i++)/*输出*/
/*printf("\'%c\'出现了%d次\n",ch[i],num[i]);*/
cout<<ch[i]<<"出现了"<<num[i]<<"次\n";
}
/*---------------*/
void main()
{
int a[26],i,j;
char b[100],c[100],*p,flag,*q;
for(i=0;i<26;i++)
a[i]=0;
printf("Input a string:");
/*-------*/
while((b[i]=getchar())!='\n')/*输入*/
i++;
b[i]='\0';
detect(b);
/*-------*/
gets(b);
printf("Input the string you want to find:");
gets(c);
for(i=0;b[i];i++)
{
if(b[i]>='A'&&b[i]<='Z')
a[b[i]-65]++;
else if(b[i]>='a'&&b[i]<='z')
a[b[i]-97]++;
}
for(p=c,i=0;b[i];i++)
if(b[i]==*p)
{
p++;
continue;
}
else if(*p==0)
{
for(j=0;j<strlen(c);j++)
i--;
q=&b[i];
break;
}
else
p=c;
if(*p==0)
{
printf("Have find!\nDo you want to change it(y or n):");
flag=getchar();
fflush(stdin);
if(flag=='y'||flag=='Y')
{
printf("Change it with:");
gets(c);
for(p=c;*p;p++,q++)
*q=*p;
}
}
printf("After change:");
puts(b);
printf("\n");
for(i=0;i<26;i++)
printf("%d ",a[i]);
getchar();
}
其实就是输入几个字母,然后查找 替换 比如输入 homehome 查找h换成b然后就是bomebome 展开
展开全部
没细看
不过下面这个应当有点问题.
你的i现在不是0了.
while((b[i]=getchar())!='\n')/*输入*/
i++;
不过下面这个应当有点问题.
你的i现在不是0了.
while((b[i]=getchar())!='\n')/*输入*/
i++;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<string.h>
int main()
{
char ch;
int b[26]={0};
int i;
while((ch=getchar())!='\n')
{
if(ch>='A'&&ch<='Z')
{
b[ch-'A']+=1;
}
else if(ch>='a'&&ch<='z')
{
b[ch-'a']+=1;
}
}
for(i=0;i<26;++i)
{
printf("%c,%d\n",char ('A'+i),b[i]);
}
printf("\n");
return 0;
}
//你写的代码好复杂,我不清楚你的第二问是啥意思,能再清楚点不!
告诉我, 我再给你把第二问也给写了!
#include<string.h>
int main()
{
char ch;
int b[26]={0};
int i;
while((ch=getchar())!='\n')
{
if(ch>='A'&&ch<='Z')
{
b[ch-'A']+=1;
}
else if(ch>='a'&&ch<='z')
{
b[ch-'a']+=1;
}
}
for(i=0;i<26;++i)
{
printf("%c,%d\n",char ('A'+i),b[i]);
}
printf("\n");
return 0;
}
//你写的代码好复杂,我不清楚你的第二问是啥意思,能再清楚点不!
告诉我, 我再给你把第二问也给写了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询