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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
分离字符串
提取字符串中的奇偶位字符
c语言之模拟实现求子串(strstr)函数
strstr (str1,str2)函数是用来判断字符串str2是否是字符串str1的子字符串的函数,如果是,则返回str2在str1中出现的首字符地址,否则返回null。 代码如下: #include #include char * my_strstr(const char *str, const char *substr) { assert(str);//断言提示出错位置 asse
给定俩个字符串一个S(母串),一个T(子串),有多少种方法从母串中移除字符得到子字符串
本题源自leetcode -------------------------------------------------------------------------- 思路:动态规划题。  *  状态定义:dp[i][j]代表s[0~i-1]中T[0~j-1]不同子串的个数。  *  递推关系式:S[i-1]!= T[j-1]:  DP[i][j] = DP[i][j-1] (
c语言 母串和子串的匹配问题
#include #include int judge(char a[],char b[]) { int i=0,j=strlen(b),flag=0,m,k; while(a[i]!='\0') { if(a[i]==b[0]) { m=i; for(k=1;k&lt;j;k++) { if(a[++m]!=b[k]) break; } if
C/C++编程题之判断字符串子串
功能: 判断短字符串中的所有字符是否在长字符串中全部出现
在字符串中查找子串
/* *在字符串中查找子串 * 题目描述:给定一个字符串A,要求在A中查找一个子串B。 * 如A="ABCDF",要你在A中查找子串B=“CD”。 * 实现substr库函数的功能 */ #include #include using namespace std; int strstr(string &str, string &substr) { int j=0; int
C语言:字符串子串判断
突然想起小学期里字符串子串判断的题目,之前的写法是用循环匹配,总感觉写法欠妥 试着用递归写了一次子串匹配,就当换个思路吧 运行图: 代码:#include<stdio.h>void judge_strings(char* string,char* tiny_string,int p_string,int p_tiny_string,int &result) {//每次对当前位置的stri
C 超级难搞定的 删除字符串中的子串
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。 提示:输入数据的设计使得不可能出现输出为空的情况。#include <stdio.h> #include <string.h> #include <stdlib.h> /* * 输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2, * 即结果字符串中不能包含S2。 * 提示:输入数据的设计
c语言替换字符串中的子串
c语言替换字符串中的子串 #include #include int checkStr(char *s1, char *s2) //匹配字符串相不相等 {    for (int i = 0; i     {       if (s1[i] != s2[i]) return 0;     }    return 1; } void reStr(char *s1
C语言入门:查找子串
查找子串:输入两个字符串s和t,在字符串s中查找子串t,输出起始位置,若不存在,则输出-1.要求自定义函数char*  search(char * s,char * t)返回子串t的首地址,若未找到,则返回NULL。试编写相应程序。 #include #include #include char* search(char*s,char*t) { int size_t=strl