首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串轮换 ACM

2013-07-01 
字符串替换 ACM字符串替换时间限制:3000 ms|内存限制:65535 KB难度:2描述编写一个程序实现将字符串中的所

字符串替换 ACM
字符串替换
时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述
编写一个程序实现将字符串中的所有"you"替换成"we"
输入
输入包含多行数据 

每行数据是一个字符串,长度不超过1000 
数据以EOF结束
输出
对于输入的每一行,输出替换后的字符串
样例输入
you are what you do
样例输出
we are what we do

第一次写的代码:

#include<stdio.h>
#include<string.h>
char word[1000][1000];
char s[5]="you";
char c[5]="we";
int main(){
int x=0;
 while(scanf("%s",word[x])!=EOF){
if(strcmp(word[x],s)==0)
strcpy(word[x],c);
x++;
}
for(int i=0;i<x;x++)
printf("%s",word[x]);
printf("\n");

}


想要结束。不知道怎么以EOF结束。貌似一直结束不了。
第二次
#include<stdio.h>
#include<string.h>
char s[1000];
char word[1000][1000];
char s1[5]="you";
char c[5]="we";
int main(){
while(gets(s)){

memset(word,0,sizeof(word));
int n;
n=strlen(s);
intk=0,j=0;
for(int i=0;i<n;i++){
if(s[i]!=' '){
word[k][j++]=s[i];
}
else{
j=0;
k++;
}
}

for(j=0;j<=k;j++){
if(strcmp(word[j],s1)==0)
strcpy(word[j],c);
}
for(j=0;j<=k;j++)
printf("%s ",word[j]);
printf("\n");
memset(s,0,sizeof(s));
}

}

感觉答题上没错误了。但还AC不过去。
[解决办法]
看到你申请的word的空间,发现很多都是浪费了,你要求输入1000个长度为1000以内的字符串吗?
输入EOF在linux下是输入ctrl +d.
[解决办法]
仅供参考
#include <stdio.h>
#include <string.h>
char s[256];
char *p;
int r,n,i;
int main() {
    while (1) {
        printf("请输入一行文字(空行结束),"%%20"将替换为" ","你懂得"将替换为"XXXXXX":\n");
        fgets(s,256,stdin);
        if ('\n'==s[0]) break;
        p=s;
        while (1) {
            p=strstr(p,"%20");
            if (p) {
                memmove(p+1,p+3,strlen(p)-3+1);
                p[0]=' ';
            } else break;
        }
        p=s;
        while (1) {
            p=strstr(p,"你懂得");
            if (p) {
                memmove(p+6,p+6,strlen(p)-6+1);


                for (i=0;i<6;i++) p[i]='X';
            } else break;
        }
        printf("%s",s);
    }
    return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//



[解决办法]

#include<stdio.h>
#include<string.h>
char s[1000];
char word[1000][1000];
char s1[5]="you";
char c[5]="we";
int main(){
while(gets(s)){
memset(word,0,sizeof(word));
int n;
n=strlen(s);
intk=0,j=0;
for(int i=0;i<n;i++){
if(s[i]!=' '){
word[k][j++]=s[i];
}
else{
j=0;
k++;
}
}

for(j=0;j<=k;j++){
if(strcmp(word[j],s1)==0)
strcpy(word[j],c);
}
//末尾多输出了一个空格。。改成这样。。
for(j=0;j<k;j++)
printf("%s",word[j]);
printf("%s\n", word[k]);
memset(s,0,sizeof(s));
}
}

热点排行