《C语言及程序设计》实践参考——字符串复制

简介: 返回:贺老师课程教学链接  实践要求【项目3-字符串复制】下面的程序,将str1中除空格外的所有字符,复制到了str2中。#include <stdio.h>int main(){ char str1[100]="I am a happy boy\'s daddy.",str2[100]; int i=0,j=0; while(str1[i]!='\

返回:贺老师课程教学链接  实践要求


【项目3-字符串复制】
下面的程序,将str1中除空格外的所有字符,复制到了str2中。
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    while(str1[i]!='\0')
    {
        if(str1[i]!=' ')
        {
            str2[j]=str1[i];
            j++;
        }
        i++;
    }
    str2[j]='\0';//切记!!
    printf("去除空格后的字符串: %s\n", str2);
    return 0;
}
请分别编制程序,完成下面的处理:
(1)完整复制字符串;
[参考解答]
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i,j;
    for(i=0,j=0; str1[i]!='\0'; i++)
    {
        str2[j]=str1[i];
        ++j;
    }
    str2[j]='\0';//切记!!
    printf("复制后的字符串: %s\n", str2);
    return 0;
}
还可以写作:
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    for(i=0; str1[i]!='\0';)
    {
        str2[j++]=str1[i++];//注意下标处的写法
    }
    str2[j]='\0';//切记!!
    printf("复制后的字符串: %s\n", str2);
    return 0;
}

还可以写作:
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    while((str2[j++]=str1[i++])!='\0');//如此表达式!循环体为空
    printf("复制后的字符串: %s\n", str2);
    return 0;
} 

还可以写作:
#include <stdio.h>
int main()
{
    char str1[100]="I am a happy boy\'s daddy.",str2[100];
    int i=0,j=0;
    while(str2[j++]=str1[i++]);  //其实和上面的程序等价
    printf("复制后的字符串: %s\n", str2);
    return 0;
}

(2)将str1和str2接起来存放到str3中;
[参考解答]
#include <stdio.h>
int main()
{
    char str1[20]= {"int i,a[100];"};
    char str2[20]= {"//注释: 定义变量"};
    char str3[40];
    int i=0,j=0;
    while(str1[j]!='\0')  //复制str1
    {
        str3[i++]=str1[j++];
    }
    j=0;    //下面复制str2
    while(str2[j]!='\0')
    {
        str3[i++]=str2[j++];
    }
    str3[i]='\0';  //一定要保证str3中有'\0'
    printf("处理后的字符串是: %s\n", str3);
    return 0;
}

(3)去除str1中的空格,仍保存在str1中;
[参考解答]策略不是去除空格,而是复制非空格字符,不复制空格,这样,空格挂了。
在现实中,迟到的员工罚款,是一种办法;还有一种做法,奖励按时到的员工,迟到的没有奖。都是奖勤罚懒。
#include <stdio.h>
int main()
{
    char str[40]= {"I am a boy."};
    int i=0,j=0;
    while(str[j]!='\0')  //找到str的结束
    {
        if(str[j]!=' ')
            str[i++]=str[j++];  //如果str[i]不是空格,将复制
        else
            j++;    //str[j]为空格时,没有进行复制
                    //j++而没有i++,所以只要有空格,j的值一定会大于i的
                    //不管是否有空格,j一直勇往直前,i则遇空格就休息
    }
    str[i]='\0';    //str[i]处是复制结束后的位置
    printf("处理后的字符串是: %s\n", str);
    return 0;
}

(4)将str1和str2连接起来,仍存放在str1中;
[参考解答]
#include <stdio.h>
int main()
{
    char str1[40]= {"I am a boy."};
    char str2[20]= {"//注释: 废话一句"};
    int i=0,j=0;
    while(str1[i]!='\0')  //找到str1的结束
    {
        i++;
    }
    j=0;    //下面复制str2
    while(str2[j]!='\0')
    {
        str1[i++]=str2[j++];
    }
    str1[i]='\0';  //一定要保证str1中有'\0'
    printf("处理后的字符串是: %s\n", str1);
    return 0;
}


目录
相关文章
|
3月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
246 15
|
9月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
378 16
|
9月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
209 18
|
9月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
180 13
|
9月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
206 3
|
9月前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
177 2
|
9月前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
148 1
|
存储 编译器 C语言
在C语言中的数组和字符串
在C语言中的数组和字符串
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
363 8
|
存储 机器学习/深度学习 Linux
【C语言】语言篇——数组和字符串
【C语言】语言篇——数组和字符串
81 0