簡體   English   中英

連接C中的字符串時如何用一個空格更改換行符?

[英]How to change newline character with one space when concatenating strings in C?

首先,我必須提到,我只是作為初學者學習 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 也會讀取換行符,因此 output 看起來像這樣:

Hello World

我嘗試使用puts而不是fgets並且效果很好,但是太多人說不要使用function。 然后我發現我可以在第一個fgets之后使用strcspn刪除換行符,但這並沒有給我想要的單詞之間的一個空格。 所需的 output: Hello World我得到了什么: HelloWorld

任何建議如何做到這一點?

你可以通過以下方式

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 有足夠的空間將 append 存儲在數組 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;
}

它的 output 可能看起來像

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

從調用fgets輸入的字符串中刪除換行符的一般方法如下

string[ strcspn( string, "\n" ) ] = '\0';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM