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++;
}
}
}