鱼C论坛

 找回密码
 立即注册
查看: 787|回复: 5

[已解决]C语言字符串中插入空格问题

[复制链接]
发表于 2021-12-15 18:03:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入一个4位数字,要求输出这4个数字字符,但每两个数字空间一个空格,输入1990,应输出“1 9 9 0”。
#include<stdio.h>
#include<string.h>
int main(){
    void insert(char[]);
    char str[80];
    printf("input four digits:");
    scanf("%s",str);
    printf("%d\n",strlen(str));
    insert(str);
    return 0;
}
void insert(char str[]){
    int i;
    for(i=strlen(str);i>0;i--){
        str[2*i]=str[i];
        str[2*i-1]=' ';
    }
    printf("output:\n%s\n",str);
}
这两行代码是什么意思?
        str[2*i]=str[i];
        str[2*i-1]=' ';
按照输入1990是4个字符,那str[i]就是str[4],str[4]赋值给str[2*i],那str[2*i]中的i就是2吗?
那i--后i=3,str[2*i]=str[3],i=1.5?问题是i是整数不能等于1.5,所以我的理解应该是错误的
最佳答案
2021-12-15 20:19:30
本帖最后由 jackz007 于 2021-12-15 20:25 编辑
1163028233 发表于 2021-12-15 20:02
大哥,我想问的是我那个代码是如何实现的,那个代码可以运行完成题目要求的功能,我只是不清楚程序的运行 ...

    for(i = strlen(str) ; i > 0 ; i --)  // 这个 for 语句将循环 4 次,i 的值将依次为 4 , 3 , 2 , 1
    {
            str[2 * i] =str[i]   ; 
            str[2 * i-1] = ' '   ;
    }
    假如 str[] = '1234'
    4 次循环的情况如下:
    [i = 4]: str[8] = str[4] ; '\0'
             str[7] = ' '    ; ' '
    [i = 3]: str[6] = str[3] ; '4'
             str[5] = ' '    ; ' '
    [i = 2]: str[4] = str[2] ; '3'
             str[3] = ' '    ; ' '
    [i = 1]:str[2] = str[1] ; '2'
             str[1] = ' '    ; ' '
             str[0] = '1'    ; '1'
        从下往上,从 str[0] ~ str[8] 把所有的注释串起来看,就知道这 2 句代码在干什么了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-15 18:35:41 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-15 18:38 编辑
#include<stdio.h>

char * insert(char str[])
{
        for(int i = 0 ; i < 4 ; i ++) str[5 - i] = str[4 - i]     ;
        str[2] = ' '                                              ;
        return str                                                ;
}

int main()
{
        char str[80]                                              ;
        int i                                                     ;
        printf("input four digits : ")                            ;
        for(i = 0 ; i < 4 && (str[i] = getchar()) != '\n' ; i ++) ;
        if(i == 4) {
                str[4] = '\0'                                     ;
                printf("%s\n" , insert(str))                      ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-15 19:14:04 | 显示全部楼层
#include <stdio.h>

int main(){
    char a, b, c, d;
    scanf("%c%c%c%c", &a, &b, &c, &d);
    printf("%c %c %c %c", a, b, c, d);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-15 20:02:35 | 显示全部楼层

大哥,我想问的是我那个代码是如何实现的,那个代码可以运行完成题目要求的功能,我只是不清楚程序的运行机制或者原理,想找个人给我说下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-15 20:03:11 | 显示全部楼层

大哥,我想问的是我那个代码是如何实现的,那个代码可以运行完成题目要求的功能,我只是不清楚程序的运行机制或者原理,想找个人给我说下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-15 20:19:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-12-15 20:25 编辑
1163028233 发表于 2021-12-15 20:02
大哥,我想问的是我那个代码是如何实现的,那个代码可以运行完成题目要求的功能,我只是不清楚程序的运行 ...

    for(i = strlen(str) ; i > 0 ; i --)  // 这个 for 语句将循环 4 次,i 的值将依次为 4 , 3 , 2 , 1
    {
            str[2 * i] =str[i]   ; 
            str[2 * i-1] = ' '   ;
    }
    假如 str[] = '1234'
    4 次循环的情况如下:
    [i = 4]: str[8] = str[4] ; '\0'
             str[7] = ' '    ; ' '
    [i = 3]: str[6] = str[3] ; '4'
             str[5] = ' '    ; ' '
    [i = 2]: str[4] = str[2] ; '3'
             str[3] = ' '    ; ' '
    [i = 1]:str[2] = str[1] ; '2'
             str[1] = ' '    ; ' '
             str[0] = '1'    ; '1'
        从下往上,从 str[0] ~ str[8] 把所有的注释串起来看,就知道这 2 句代码在干什么了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表