标题:字符串复制的问题
只看楼主
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
晕。咋发了两遍一样的帖子

DO IT YOURSELF !
2017-03-25 22:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
"整个字符串的ascll码",这句是什么意思?
通常ASCII码是指字符的,不是字符串。

2017-03-26 06:56
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册: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: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用吹水佬在2017-3-26 06:56:35的发言:

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

DO IT YOURSELF !
2017-03-26 07:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475486-1-1.html




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

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