| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1768 人关注过本帖
标题:字符串复制的问题
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:8 回复次数:24 
字符串复制的问题
问题请看代码红色字部分。程序是两个字符串比较。输出整个比较后的ascll码!,相等就是0。不能用strcmp函数

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void input(char *str1, char *str2)
{
    int i;
    for(i=0;i<30;i++)                        //把最先的两个字符串赋初值,每个字符为'0'问题网下面看
    {
        str1[i]='0';
        str2[i]='0';
    }
    printf("请输入第一个字符串\n");
    gets(str1);
    printf("请输入第二个字符串\n");
    gets(str2);
}
void output (char *str1, char *str2)
{

    int i, len, len1, cot1=0,cot2=0;
    len=strlen(str1);
    len1=strlen(str2);
    if(len>len1)
    for(i=0; i<len; i++)
    {
     if(str2[i]!='\0'&&str2[i]!='0')        问题在这里。如果没有str2[i]!=‘0’,只有str2[i]!=‘\0’程序就是错的。为啥会这样。如果最开始我没给初值的的话,字符串str[30]他后面不是都跟的‘\0’吗,然而我验证的结果字串结束后只跟了一个'\0',其它的就不是'\0',所以我给了初值才行。那么字符串后面没有给定值的全部是不是'\0'
     cot1+=(str1[i]-str2[i]);            
     else
     cot2+=str1[i];
    }
    else
    for(i=0; i<len1; i++)
    {
        if(str1[i]!='\0'&&str1[i]!='0')
        cot1+=str1[i]-str2[i];
        else
        cot2-=str2[i];
    }
    printf("比较后的ascll=%d\n",cot1+cot2);

}
int main()
{
    char str1[30], str2[30];
    while(1)
    {
        input(str1, str2);
        output(str1, str2);
    }
    return 0;
}
搜索更多相关主题的帖子: include 字符串 
2017-03-25 16:49
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10575
专家分:43038
注 册:2014-5-20
收藏
得分:4 
    int i;
    for(i=0; i<30; i++)
    {
        str1[i]='0';
        str2[i]='0';
    }
1、这几行代码可以不要。

2、if(str2[i]!='\0'&&str2[i]!='0')
        cot1+=(str1[i]-str2[i]);
其中的str2[i]!='0'时,str1[i]在cot2累加,即此时忽略str2中的'0'字符。

[此贴子已经被作者于2017-3-25 17:18编辑过]

2017-03-25 17:13
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10575
专家分:43038
注 册:2014-5-20
收藏
得分:0 
字符码值的累加累减,算法应该还可以优化。
2017-03-25 17:14
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 吹水佬
   int i;
    for(i=0; i<30; i++)
    {
        str1[i]='0';
        str2[i]='0';
    }
不是 程序如果不给初值,程序就是错的。你试看
2017-03-25 21:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
gets函数 默认接收以\0 结束的字符串  也就是说 只要给接收的字符串申请空间就可以了 都不用初始化

另: 你赋初值为'0' 而不是'\0'  也想不明白  你是比较字符串 而不是做神马字符串加减法

DO IT YOURSELF !
2017-03-25 22:02
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 5楼 wp231957
我开始就是没赋值,直接输入到字符数组str1,str2。比较每个字符的ascll码的时候,短的那个字符串已经是'\0'结束了,后面的ascll码比较就是错的,你自己试试不给值。

一张图是没给初值,一张是给了值的
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
2017-03-25 22:17
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 吹水佬
不给初值是错的。你看看6楼我传的截图。为啥会这样,我就纳闷了
2017-03-25 22:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
那只能是你算法有BUG
字符串比较原则是 首字符 首字符如果相同则比较第二字符。以下类同

DO IT YOURSELF !
2017-03-25 22:21
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 8楼 wp231957
一个个比较的。我代码不是这样的?短的判断到'\0'的时候,那一次不进行运算。继续比较,继续会运算
2017-03-25 22:26
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
那只能是你算法有BUG
字符串比较原则是 首字符 首字符如果相同则比较第二字符。以下类同

DO IT YOURSELF !
2017-03-25 22:37
快速回复:字符串复制的问题
数据加载中...
 
   



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

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