| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1453 人关注过本帖
标题:字符串替换--帮忙修改一下
只看楼主 加入收藏
天谈2011
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-3-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
字符串替换--帮忙修改一下
#include <stdio.h>
#define n 1000
#include <string.h>
int main()
{

char str1[n];
int x; int i,j;
for(i=0;i<10000;++i)
{
    gets(str1);
    x=strlen(str1);
for(i=0;i<x;i++)  
{
    if(str1[i]=='E')
    {
if(str1[i+1]=='O')
{
if(str1[i+2]=='F')
break;
}
    }
if(str1[i]=='y')
{
if(str1[i+1]=='o')
{
if(str1[i+2]=='u')
{
str1[i]='w';  
str1[i+1]='e';
for(j=i+2;j<n;j++)
{
str1[j]=str1[j+1];
}
}

}

}

}

printf("%s\n",str1);
return 0;
}
搜索更多相关主题的帖子: 字符串 
2011-03-29 15:42
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:6 
题意为何?

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-29 15:48
天谈2011
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-3-27
收藏
得分:0 
输入多行字符串数据,把其中的you换成we
如果输入EOF数据输入结束
2011-03-29 16:00
autumn1202
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:64
专家分:553
注 册:2011-2-21
收藏
得分:10 
有几个问题
1. 第二个for也用了i,跟第一个for的i冲突
2. break只能跳出第二个for,不知道是不是lz的本意
3. if(str1[i]=='y')最好改成else if
4. for(j=i+2;j<n;j++) 这里不要用n,用x-1即可而且最后一个要赋成'\0', 也就是str1[x-1] = '\0'
5. 你这样写,第一个循环没什么用啊
2011-03-29 16:18
天谈2011
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-3-27
收藏
得分:0 
1 怎样用break才能跳出第一个for循环
2 第一个循环用以输入多组数据
3 其他的我会采纳你的建议
2011-03-29 18:45
天谈2011
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2011-3-27
收藏
得分:0 
fatal error C1004: unexpected end of file found
这是怎么回事?
2011-03-29 18:46
tp19920527
Rank: 2
等 级:论坛游民
帖 子:15
专家分:10
注 册:2011-2-26
收藏
得分:2 
你花括号是奇数个吧 看看哪儿少了吧
2011-03-29 22:30
shinan77
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:87
专家分:188
注 册:2010-9-24
收藏
得分:0 
楼主,不得不批评你一下,格式太乱了,让人看着很费劲,最可恶的是宏定义居然没有大写!!!版主赶紧删了吧

--------将学到的东西为我所用,这才是学习的目的 --------
2011-03-29 22:42
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
这是学习字符串的时候做过的一个习题,可能有BUG,作为一个练习,仅供楼主参考。
程序代码:
#include <stdio.h>

int main (void) {

    char string[81],s1[10],s2[10]; //string为主串,s1为源字符串,s2为要替换的字符串
    int pos;                       //要删除/插入的位置
    void readLine (char str[]);    //读取输入
    int strLen (char str[]);       //获取字符串长度
    int findStr (char str[],char s1[]); //查找字符串,返回字符串所在起始位置
    void replaceStr (char str[],char s1[],char s2[],int pos);  //字串替换
//输入原文
    printf ("Type in text in string:\n");
    readLine(string);
//输入要被替换的字符串
    printf ("Type will be replaced string:\n");
    readLine(s1);
//输入即将替代的字符串
    printf ("Type new string:\n");
    readLine(s2);    
//查找字符串所在位置
    pos=findStr(string,s1);
//如果没有找到则退出程序
    if(pos==-1) {
        printf ("No Found!\n");
        return 1;
    }
//否则,进行替换操作
    replaceStr(string,s1,s2,pos);
//打印结果
    printf ("\nAfter replaced is : %s\n",string);

    return 0;

}
//read line in string
void readLine (char str[]) {

    char ch;
    int i=0;
    do {
        ch=getchar();
        str[i]=ch;
        i++;
    }while(ch!='\n');

    str[i-1]='\0';
}
//get length of string
int strLen (char str[]) {
    int len=0;
    while(str[len]!='\0'){
        len++;
    }
    return len;
}
//
int findStr (char str[],char s1[]) {

    int i,j,k,c,len;
    
    for(i=0;str[i+strLen(s1)-1]!='\0';i++) {
        for(j=i,k=0,c=0;j<(strLen(s1)+i);k++,j++) {
            if(str[j]==s1[k]) {
                c++;
            }
        }
        if(c==strLen(s1)) {
            return i;
        }
    }
    return -1;
}
//replace character string
void replaceStr (char str[],char s1[],char s2[],int pos) {    

    void moveStr (char str[],int n,int m);
    void insertStr (char str[],char s2[],int n);
    
    moveStr(str,pos,strLen(s1));
    insertStr(str,s2,pos);

}
//move sub-string in main string
void moveStr (char str[],int n,int m) {

    int i,j;

    for(i=n,j=(m+n);str[j]!='\0';i++,j++) {
        str[i]=str[j];
    }
    str[i]='\0';

}
//insert sub-string in main string
void insertStr (char str[],char s2[],int n) {

    int i,j,k,l1,l2;
    l1=strLen(s2);
    l2=strLen(str);

    for(i=l2-1;i>=n;i--) {
        str[i+l1]=str[i];
    }

    str[l1+l2]='\0';

    for(i=n,k=0;i<n+l1;i++,k++) {
        str[i]=s2[k];
    }

}
收到的鲜花
  • 天谈20112011-03-30 13:56 送鲜花  2朵   附言:谢谢你的帮助 从你的代码中,我学到了写代 ...

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-29 23:10
autumn1202
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:64
专家分:553
注 册:2011-2-21
收藏
得分:0 
以下是引用天谈2011在2011-3-29 18:45:00的发言:

1 怎样用break才能跳出第一个for循环
2 第一个循环用以输入多组数据
3 其他的我会采纳你的建议
关于1,通常可以在跳出第二层循环后,根据跳出原因进一步判断是否要跳出第一层,这里你可以直接在你的break前加语句 i = 10000 就可以中断第一层循环
2的话,如果你是这个目的的话,printf("%s\n",str1)与return之间要加大括号
收到的鲜花
  • 天谈20112011-03-30 13:50 送鲜花  3朵   附言:谢谢你的帮助,你的建议我赞同!
2011-03-30 09:54
快速回复:字符串替换--帮忙修改一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024148 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved