在char数组中的空格后添加空格

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

因此,我需要在char字符串中的空格后插入空格:


我们有字符串:hello world,函数应该返回hello world

hello world something else => hello world something else

[hello world => hello world(4个空格)(不一定,但最好)]

如何? (肯定需要使用char字符串)


我的解决方案(由于只能插入1个空格,因此无法正常工作)

hello world something返回hello world something

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

using namespace std;

char* addSpaces(char* str) {
    char* p = strchr(str, ' ');

    if (p) {
        p++;
        int n = strlen(p);
        p[n + 1] = 0;
        while (n) {
            p[n] = p[n - 1];
            n--;
        }
        *p = ' ';
    }

    return str;
}

int main(void) {

    const int stringCount = 1;
    const int c = 500;

    char cstring[stringCount][c];
    string str[stringCount];

    for (int i = 0; i < stringCount; i++) {
        cout << "Enter " << i + 1 << ". line: ";
        cin.getline(cstring[i], c);
        str[i] = cstring[i];
    }

    for (int i = 0; i < stringCount; i++) {
        cout << "First function result with char in parameter: ";
        char* result = addSpaces(cstring[i]);
        cout << result << endl;
    }

}
c++ arrays c-strings
1个回答
0
投票

首先检查空格,并以len + space开头。并在每次迭代中添加额外的空间。其他错误可能会超出索引范围。

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

using namespace std;
int main(void)
{
    std::string line;
    const int stringCount = 1;
    const int c = 500;
    cout << "Enter line: ";
    std::getline(std::cin, line);
    cout << line << endl;
    int spaceCount = 0;
    for (int i = 0; i < sizeof(line); i++)
    {
        if (line[i] == ' ')
        {
            spaceCount += 1;
        }
    }
    char cstring[stringCount + spaceCount];
    int j = 0;
    for (int i = 0; i < sizeof(line); i++)
    {
        if (line[i] == ' ')
        {
            cstring[j++] = ' ';
            cstring[j++] = ' ';
        }
        else
        {
            cstring[j++] = line[i];
        }
    }
    cout << cstring << endl;
}
© www.soinside.com 2019 - 2024. All rights reserved.