| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1767 人关注过本帖
标题:字符串复制的问题
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
晕。咋发了两遍一样的帖子

DO IT YOURSELF !
2017-03-25 22:50
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10575
专家分:43038
注 册:2014-5-20
收藏
得分:0 
以下是引用Emotiona在2017-3-25 22:19:55的发言:

不给初值是错的。你看看6楼我传的截图。为啥会这样,我就纳闷了

看不明,你具体说说想比较两个字符串的什么?
如果类似strcmp的比较,用字符码值加加减减的结果可行吗?
2017-03-25 22:58
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:4 
赋值初始化之后才会是'\0',不然就是随机值。
一般有三种方式
char cTmp[30];
①memset(cTmp, '\0', 30);
②bzero(cTmp, 30);
③直接初始化char cTmp[30] = {'\0'};
2017-03-25 23:31
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 10楼 wp231957
能否实现一个看看?我不知道哪里比较不对
2017-03-26 00:57
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 13楼 烟雨晨曦
终于有人明白我的意思了。当短的字符串为'\0',再往下进行比较。短的字符串最后就不是'\0'了,是随机值。
你这第一步,第二步是函数调用是什么?不明白。
2017-03-26 01:09
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 12楼 吹水佬
就是每个字符ascll码比较,同strcmp返回值一样,再输出整个字符串的ascll码。
2017-03-26 01:20
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10575
专家分:43038
注 册:2014-5-20
收藏
得分:0 
以下是引用Emotiona在2017-3-26 01:20:16的发言:

就是每个字符ascll码比较,同strcmp返回值一样,再输出整个字符串的ascll码。

相当于模拟strcmp,这样比较一下:strcmp返回是 -1 or 0 or 1,也可看成是 <0 or ==0 or >0
#include <stdio.h>
#include <string.h>

void input(char *str1, char *str2)
{
    printf("请输入第一个字符串\n");
    gets(str1);
    printf("请输入第二个字符串\n");
    gets(str2);
}

int output (char *str1, char *str2)
{
    for (; *str1==*str2 && *str1 && *str2; str1++,str2++) NULL;
    return *str1-*str2;
}

main()
{
    char str1[30], str2[30];
    while(1)
    {
        input(str1, str2);
        printf("%d %d\n", output(str1, str2), strcmp(str1, str2));
    }
}
2017-03-26 06:52
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10575
专家分:43038
注 册:2014-5-20
收藏
得分:0 
"整个字符串的ascll码",这句是什么意思?
通常ASCII码是指字符的,不是字符串。

2017-03-26 06:56
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用Emotiona在2017-3-26 00:57:43的发言:

能否实现一个看看?我不知道哪里比较不对
我给你看看微软工程师写的strcmp源码
程序代码:
/*这里我摘录了函数的版权情况
*strcmp.c - routine to compare two strings (for equal, less, or greater)
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       Compares two string, determining their lexical order.
*
*/
/*  这里我只摘录了函数的返回值
Exit:
*       returns -1 if src <  dst
*       returns  0 if src == dst
*       returns +1 if src >  dst
*/
int __cdecl strcmp ( const char * src, const char * dst )
{
        int ret = 0 ;
        while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst;
        if ( ret < 0 )  ret = -1 ;
        else if ( ret > 0 ) ret = 1 ;
        return( ret );
}



DO IT YOURSELF !
2017-03-26 07:07
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用吹水佬在2017-3-26 06:56:35的发言:

"整个字符串的ascll码",这句是什么意思?
通常ASCII码是指字符的,不是字符串。
 
我怀疑他是把整个字符串的所有字符的ascii码累加和  不过这个值 啥用也没有啊

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



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

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