c++ 手动串联 C 字符串函数,调用两次并添加一个空格

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

我有一个作业要编写一个函数,该函数接受两个 C 字符串参数并将第二个参数附加到第一个参数,就像 strcat 函数一样,但不使用所述函数。然后,编写一个主驱动程序,提示用户输入两个字符串,调用 myStrcat 函数将空格连接到第一个字符串的末尾,然后再次调用 myStrcat 将第二个字符串连接到第一个字符串的末尾。我可以使用 strlen 函数,但这是库中唯一的函数。我写了下面的内容,显然它只调用该函数一次并且不添加空格。我一生都无法理解如何在其中强制插入一个空格...提前致谢,我真的一直在努力解决这个问题...

#include <iostream>
#include <cstring>

using namespace std;

void myStrcat(char s1[], char s2[]);

int main(){

char s1[100];
char s2[100];

cout << "Enter first string: ";
cin.getline(s1, 100);
myStrcat(s1, s2);
cout << "Enter second string: ";
cin.getline(s2, 100);
myStrcat(s1, s2);

cout << s1 << endl;


return 0;
}

//Parameters:
//  string1: first string (user input)
//  string2: second string (user input)
//Pre conditions: 
//Post conditions: The first actual parameter is altered
//Returns: Both srings combined into one; string1 + string2
void myStrcat(char s1[], char s2[])
{
int i, j;
for (i=0; s1[i] != '\0'; ++i);
for (j=0; s2[j] != '\0'; ++j, ++i){
    s1[i] = s2[j];
}
s1[i] = '\0';
}
c++ concatenation c-strings string-concatenation
1个回答
0
投票

为了安全,

void myStrcat(char s1[], size_t s1Size, char s2[])

然后检查缓冲区 s1 没有溢出。

void myStrcat(char s1[], size_t s1Size, const char s2[])
{
    size_t i = 0, j = 0;

    // Move 'i' to the end of s1
    while (i < s1Size - 1 && s1[i] != '\0') {
        i++;
    }

    // Copy characters from s2 to the end of s1 
    //  without exceeding s1Size - 1
    while (i < s1Size - 1 && s2[j] != '\0') {
        s1[i++] = s2[j++];
    }

    // Null-terminate the result
    s1[i] = '\0';
}
© www.soinside.com 2019 - 2024. All rights reserved.