C语言中串联字符串时,如何用一个空格改变换行符?

问题描述 投票:1回答:1

首先,我必须提到,我是刚刚学习C语言中的字符串的初学者。我想做的是从用户那里得到2个字符串作为输入,然后将它们连接起来。所以我是这样做的。

char firststring[40], secondstring[40];

printf ("Enter first string: ");
fgets (firststring, 40, stdin);
printf ("Enter second string: ");
fgets (secondstring, 40, stdin);

strcat(firststring, secondstring);
printf("%s", firststring);

问题是当用户输入第一个字符串时 fgets也会读取换行符 所以输出的结果是这样的:

Hello World

我试着用 puts 而不是fgets,而且效果很好,但是太多人说不要用这个功能。后来我发现我可以用 strcspn 前后 fgets 去掉换行符,但这并没有给我一个我想要的词之间的空格。希望的输出。Hello World我得到了什么。HelloWorld

有什么建议吗?

c string concatenation newline
1个回答
1
投票

你可以用下面的方法

printf ("Enter first string: ");
fgets (firststring, 40, stdin);
printf ("Enter second string: ");
fgets (secondstring, 40, stdin);

size_t n = strcspn( firststring, "\n" );
firststring[n] = ' ';
strcpy( firststring + n + 1, secondstring );

只要firststring有足够的空间来追加存储在数组secondstring中的字符串。

下面是一个示范程序

#include <stdio.h>
#include <string.h>

int main(void) 
{
    enum { N = 40 };
    char firststring[N], secondstring[N];

    printf( "Enter first string: " );
    fgets( firststring, N, stdin );

    printf( "Enter second string: " );
    fgets( secondstring, N, stdin );

    size_t n = strcspn( firststring, "\n" );
    firststring[n] = ' ';

    strcpy( firststring + n + 1, secondstring );

    puts( firststring );

    return 0;
}

它的输出可能看起来像

Enter first string: Hello
Enter second string: World!
Hello World!

一个通用的方法,从调用 fgets 是以下内容

string[ strcspn( string, "\n" ) ] = '\0';
© www.soinside.com 2019 - 2024. All rights reserved.