我尝试编写一个函数,在字符串中定期插入空格。 如果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/