我有一个char数组。我想为每个空间再插入两个空间

时间:2019-07-13 04:37:32

标签: c++ arrays char

我的逻辑如下:

#include<bits/stdc++.h>
    using namespace std;

    int main(){
        char a[50] = {'h','i',' ','m','e',' ','t','e'};


        // k = 4 because i have 2 spaces and for each
       // space i have to insert 2 spaces . so total 4 
       //spaces
        int k=4;
        for(int i=strlen(a)-1 ; i>0 && k >0 ; i--){
            if(a[i] != ' ')
            {
                a[i+k] = a[i];
                a[i] = ' ';
            }
            else
            {
                k = k - 2;
            }

        }

        printf("%s" , a);

        return 0;
    }

我必须使用字符数组来解决它。我能够 使用字符串stl做到这一点 我得到的输出是 嗨,我 但是答案是 嗨---我--- te。

1 个答案:

答案 0 :(得分:1)

有时候,我想知道是什么导致了投票失败,什么没有引起了投票。

无论如何。我当然会帮助您。

您的代码被标记为C ++。但是您的代码中没有C ++。它是纯C。

而且,您包括#include<bits/stdc++.h>并使用std名称空间using namespace std;。从现在开始:请一生都不要再做这种事情。或者,停止使用C ++。

此外,永远不要像C ++中的char a[50]那样使用普通的C样式数组。

在您的代码中,您有一些错误。最关键的是缺少终止符0,然后调用strlen。使用功能之前,请务必在某处检查该功能的工作原理。使用有意义的变量名。写评论。始终检查边界。

我更新了您的C代码:

#include <stdio.h>

int main()
{
    // Character String to work on
    char charString[50] = "hi me te";

    // Check all possible positions in string
    for (int index = 0; (index < 49) && (0 != charString[index]); ++index)
    {
        // If there is a space in the string
        if (' ' == charString[index])       
        {
            // Shift all characters one position to the right
            for (int shiftPosition = 48; shiftPosition >= index; --shiftPosition)
            {
                charString[shiftPosition + 1] = charString[shiftPosition];
            }
            ++index;
        }
    }
    // Show result
    printf("%s\n", charString);

    return 0;
}

这里是C ++解决方案

#include <iostream>
#include <string>
#include <regex>

int main()
{
    // Text to work on
    std::string text("hi me te");

    // Replace every space with 2 spaces. Print result
    std::cout << std::regex_replace(text, std::regex(" "), "  ");

    return 0;
}

强烈建议您首先阅读一本好书。