c - 尝试在字符串中定期引入空格

标签 c

我尝试编写一个函数,在字符串中定期插入空格。 如果a[50]是一个字符串,n是用户的首选间隔, insert_space(a,b,len,n) 将在第 n 列后插入空格,并将修改后的字符串存储在 b 中。

#include <stdio.h>
int getinput(char temp[]);
void insert_space(char s1[],char s2[],int,int);
int main ()
{
    int n, len;
    char a[100], b[100];
    printf("Enter the nth column number for inserting\n");
    scanf("%d",&n);
    printf("Enter the line\n");
    len=getinput(a);
    insert_space(a,b,len,n);
    printf("%s\n",b);

}
void insert_space(char s1[],char s2[],int len, int n)
{
    int i=0, c=0,flag=0;
    for(i=0;i<=len;i++)
    {  
        if(flag!=n)
        {
            s2[c]=s1[i];
            c++;
            flag++;
        }
        else
        {
            s2[c]=' ';
            i=i-1;
            c++;
            flag=0;
        }          
    }
    s2[c]='\0';
}
int getinput(char temp[])
{
    int c, i=0;
while((c=getchar())!=EOF)
    {
        temp[i]=c;
        i++;
    }
    i--;
    temp[i]='\0';
    return i;
}

我将字符串 a 的值输入为 abcdefghijkmnop。代替 “abdce fghij kmnop”作为 b 中的输出,我得到“abcd efghi jkmno p”作为输出。我不确定我在这里做错了什么。 编辑:在包含 insert_function 代码后,我对其进行了编辑以包含整个执行代码。

最佳答案

有一个来自 scanf("%d",&n); 的 \n换行符 (Enter); 记录为 a[0]。因此,您必须管理这个未经处理的换行 (Enter)。

要解决此问题,请在函数 中的循环 while ((c = getchar()) != EOF) 之前添加额外的 c = getchar(); int getinput(char temp[]),处理 scanf("%d",&n);

留下的额外换行符

修改后的代码:-

#include <stdio.h>
int getinput(char temp[]);
void insert_space(char s1[], char s2[], int, int);
int main()
{
    int n, len;
    char a[100], b[100];
    printf("Enter the nth column number for inserting\n");
    scanf("%d", &n);
    printf("Enter the line\n");
    len = getinput(a);
    insert_space(a, b, len, n);
    printf("%s\n", b);
}

void insert_space(char s1[], char s2[], int len, int n)
{
    int i = 0, c = 0, flag = 0;
    for (i = 0; i <= len; i++)
    {
        if (flag != n)
        {
            s2[c] = s1[i];
            c++;
            flag++;
        }
        else
        {
            s2[c] = ' ';
            i = i - 1;
            c++;
            flag = 0;
        }
    }
    s2[c] = '\0';
}

int getinput(char temp[])
{
    int c, i = 0;
    c = getchar(); // to handle extra newline from scanf
    while ((c = getchar()) != EOF)
    {
        temp[i] = c;
        i++;
    }
    i--;
    temp[i] = '\0';
    return i;
}

输出:-

Enter the nth column number for inserting
5
Enter the line
abcdefghijkmnop
abcde fghij kmnop 

关于c - 尝试在字符串中定期引入空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51694913/

相关文章:

c - Kqueue udata 字段更改

c - 如何使用 C 设置 eclipse 进行大学工作

c - 为什么我的 http 服务器打印出相同的字节? (C)

c - 使用 R 和 C 中的结构减少参数数量

c++ - 许多小分配的最有效 malloc 实现?

c - 如何判断getopt中optind的值

c - 从分配的内存中设置内存值

c - 按顺序合并(交错)两个排序的数组(但合并后不排序)

c - linux 内核系统调用服务例程的源代码在哪里?

c - ADD 在 asm 中的奇怪行为