2 zcmerlin zcmerlin 于 2016.09.06 11:58 提问

C:分离字符串子串问题

通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。
如果输入“abc def gh i d”,结果将是abc,def,gh,i,d,

图片说明

我写的代码只能识别一个空格,不能识别多个空格

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

void DividString(const char *pInputStr, long lInputLen, char *pOutputStr);

int main()
{
    char str1[101], str2[101], len, i, j;

    gets(str1);

    len = strlen(str1);

    DividString(str1, len, str2);

    puts(str2);

    getchar();
    return 0;
}

void DividString(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    int i;

    for (i = 0; i < lInputLen; i++)
    {
        if (pInputStr[i] != ' ')
            pOutputStr[i] = pInputStr[i];
        else if (pInputStr[i] == ' '&&pInputStr[1 + i] != ' ')
            pOutputStr[i] = ',';
        else if (pInputStr[i] == ' '&&pInputStr[1 + i] == ' ')
            continue;
    }
    pOutputStr[i++] = ',';
    pOutputStr[i] = '\0';
}

2个回答

shihengzhen101
shihengzhen101   Rxr 2016.09.06 12:14

把函数改一下

 void DividString(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    int i;
    bool bCanInputComma = false;
    int nCount = 0;

    for (i = 0; i < lInputLen; i++)
    {
        if (pInputStr[i] != ' ')
        {
            pOutputStr[nCount] = pInputStr[i];
            ++nCount;
            bCanInputComma = true;
        }
        else if (pInputStr[i] == ' ' && bCanInputComma == true)
        {
            pOutputStr[nCount] = ',';
            ++nCount;
            bCanInputComma = false;
        }
    }

    pOutputStr[nCount] = ',';
    pOutputStr[nCount + 1] = '\0';
}
zcmerlin
zcmerlin 嗯嗯,我再想一想,谢谢!
一年多之前 回复
shihengzhen101
shihengzhen101 回复AlbertS: 重点在于碰到多余的空格时,原串的索引要++,而结果串的索引不变
一年多之前 回复
shihengzhen101
shihengzhen101 回复zcmerlin: 你的函数在思考的过程中就有一点问题,当你只用一个变量i来作为索引赋值时,就已经假定原串和结果串是相等长度的,这样就只能把一个空格换成逗号了,然后就出问题了,实际情况应该是结果的字符串可能比原来的字符串短好多,所以需要一个新的变量来记录索引
一年多之前 回复
zcmerlin
zcmerlin 嗯,谢谢,用你的函数插断点看了一遍明白了,我还想问一下我写的函数是不是逻辑有问题,可以指点一下吗
一年多之前 回复
shihengzhen101
shihengzhen101   Rxr 2016.09.06 12:17

bCanInputComma表示次数能不能输入逗号
nCount表示输出结果的长度

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!