不改动开头结尾,处理字符串

img


输入字符串不调用string函数,是字母在前数字在后,且不改变顺序如图所示

c语言一般用memcpy() 处理啊,下面是简单实现逻辑,可优化的 (有用请点击采纳,,,)

int main()
{
    const char* test = "1is6and 8";
    char num[10] = { 0 };
    char data[10] = { 0 };

    int y = 0, j = 0;
    for (int i = 0; i < strlen(test); i++)
    {
        if (test[i] >= 'a' && (test[i] <= 'z'))
        {
            data[y++] = test[i];
        }
        if (test[i] >= '0' && (test[i] <= '9'))
        {
            num[j++] = test[i];
        }
    }

    //或者这里用y和j表示长度也行
    char* result = (char*)malloc(strlen(data) + strlen(num) + 1);
    if (result == NULL) return -1;
    memset(result, 0, strlen(data) + strlen(num) + 1);
    int pos = 0;
    memcpy(result + pos, data, strlen(data));
    pos += strlen(data);
    memcpy(result + pos, num, strlen(num));
    printf("result = %s %d\n", result, pos);
    pos += strlen(num);
    printf("result = %s %d\n", result, pos);
    printf("123\n");
    free(result);
    result = NULL;
  return 0;

}


#include <stdio.h>

void main(void)
{
    char str[80], tmpl[80], tmpd[80];
    int i = 0, j = 0, len = 0, m, n;
    printf("输入一个字符串:");
    scanf("%s", str);

    while (str[len] != '\0')
    {
        if (str[len] >= '0' && str[len] <= '9')
        {
            tmpd[i++] = str[len];
        }
        else
        {
            tmpl[j++] = str[len];
        }
        len++;
    }
    // 字母在前,数字在后,顺序不变
    for (m = 0, n = 0; m < j; m++)
    {
        str[n++] = tmpl[m];
    }

    for (m = 0; m < i; m++)
    {
        str[n++] = tmpd[m];
    }
    str[n] = '\0';
    printf("%s\n", str);
}

既然说包含字符,那字符在什么地方?

用双指针做,比较简单

#include <iostream>

int main()
{
    char* str = new char[]{ "1a2b3c" }; //此处用c++写法简单一些
    char* pf, * pl;
    pf = pl = str;
    int len = strlen(str);
    while (*pf != '\0') {
        char c;
       if (isalpha(*pf)) {
           c = *pl;
           *pl = *pf;
           *pf = c;
           pf++;
           pl++;
       }
       else {
           pf++;
       }

    }
}