注册 登录
编程论坛 C语言论坛

指针复制字符串的大写字母

fengyinxqy 发布于 2020-05-09 15:25, 2197 次点击
只有本站会员才能查看附件,请 登录

如上是题目,下面是我写的吧old的所有字符串复制粘贴到newstr的代码,对这个问题我的思考是添加判断条件,符合大写字母的才复制粘贴,请大佬完善,或者改进成更简单的。
程序代码:
#include <stdio.h>
#include <assert.h>

char* MyStrcat(char *dst, const char *src)
{
    assert(dst != NULL && src != NULL);
    char *temp = dst;
    while (*temp != '\0')
        temp++;
    while ((*temp++ = *src++) != '\0');

    return dst;
}

int main()
{
    char str1[10] = "abc";
    char str2[] = "bcd";
    char* str3 = MyStrcat(str1, str2);

    printf("str1=%s\n", str1);
    printf("str2=%s\n", str2);
    printf("str3=%s\n", str3);
    return 0;
}
4 回复
#2
星泪成寒2020-05-09 18:21
程序代码:

#include <stdio.h>

char* upCopy(char *dst, const char *src)
{
    char *temp = dst;
    while (*src != '\0') {
        if ((*src >= 'a') && (*src <= 'z')) {//小写字符 转大写
            *(temp++) = *(src++) - 32;//大小写字母之间差值为32(‘a’ - ‘A’)
        } else {//其他字符 直接拷贝
            *(temp++) = *(src++);
        }
    }
   
    *temp = '\0';
    return dst;
}

int main()
{
    char str1[10] = "abcdefghi";
    char str2[10] = "bcd";
    char* str3 = upCopy(str1, str2);

    printf("str1=%s\n", str1);
    printf("str2=%s\n", str2);
    printf("str3=%s\n", str3);
    return 0;
}

#3
fengyinxqy2020-05-09 20:42
回复 2楼 星泪成寒
不是把小写转成大写的意思啦,是一串字符中把大写提取出来
#4
吹水佬2020-05-10 05:24
#include <stdio.h>
#include <ctype.h>

#define MAX_STR  1024

char* upCopy(char* newstr, const char* old)
{
    char* p = newstr;
    int i;
    for (i=0; i<MAX_STR && *old; ++old,++i)
    {
        if (isupper(*old))
            *p++ = *old;
    }
    *p = '\0';
    return newstr;
}

int main()
{
    char old[MAX_STR];
    char newstr[MAX_STR];
    scanf("%s", old);
    upCopy(newstr, old);
    printf("old: %s\n", old);
    printf("newstr: %s\n", newstr);
    return 0;
}
#5
qing_yx2020-05-11 09:57
#include <stdio.h>
#include <string.h>

void upCopy(char *newstr, char *old);
int main(void)
{
    char str1[10] = { 0 };
    char str2[] = "aCDesF";

    upCopy(str1, str2);

    printf("str1=%s\n", str1);
    printf("str2=%s\n", str2);

    return 0;
}


void upCopy(char *newstr, char *old)
{
    int j = 0;
    int len = strlen(old);
    for (int i = 0; old[i] != '\0';i++)
    {
        if (old[i] >= 'A' && old[i] <= 'Z')
        {
            newstr[j] = old[i];
            j++;
        }
    }
}
1