#include
#include
char *remove_digits(const char *str,char *result)
{
int i=0;
// const char result[99];
// char result[99];
while (*str != '\0')
{
while (*str > '0' && *str <= '9')
{
strcpy(str, str + 1);
//strcpy(result,str );
}
str++;
}
//*result=*(str+1);
//strcpy(result,str);
for(i=0;i<=99;i++)
{
strcpy(result+i,str+i );
}
//return result;
}
int main()
{
char a[99];
char b[99];
gets(a);
//scanf("%s",&a);
remove_digits(a,b);
printf("结果为:%s\n",a);
printf("结果为:%s\n",b);
return 0;
}
C:\Users\Administrator\Desktop\main.exe X
8w8d
asudd
after 8.407 seconds with return value 0
用指针去除字符串里的数字,result用于输出结果,但是我用strcpy给result赋值始终赋值不上,求解,问题出在哪了
可以在函数remove_digits()中定义一个字符数组复制str指向的字符串,然后去除这个备份的字符串里面的数字字符,然后将其结果复制到result指向的位置即可。
修改如下:
参考链接:
#include<stdio.h>
#include<string.h>
char *remove_digits(const char *str,char *result) {
int i=0;
// const char result[99];
// char result[99];
char arr[99];
char *temp=arr;
// https://blog.csdn.net/m0_52399461/article/details/121114798
strcpy(temp,str); // 因为str为指向常量的常量指针,所以复制其值到字符指针temp指向的数组,然后进行删除字符的操作
while (*temp != '\0') {
while (*temp > ='0' && *temp <= '9') { //加上一个等于,让数字字符'0'也可以去除
strcpy(temp, temp + 1);
//strcpy(result,str );
}
temp++;
}
// 将存储了删除字符后结果的字符串复制到字符指针result指向的字符数组
strcpy(result,arr);
//*result=*(str+1);
//strcpy(result,str);
// for(i=0; i<=99; i++) {
// strcpy(result+i,str+i );
//
// }
return result;
}
int main() {
char a[99];
char b[99];
gets(a);
//scanf("%s",&a);
char *s =remove_digits(a,b);
printf("结果为:%s\n",a);
printf("结果为:%s\n",b);
// printf("结果为:%s\n",s);
return 0;
}
博主您好,
在这段代码中,问题出在函数remove_digits中的result参数是一个指针类型的形参,需要在函数内部分配内存空间,以存储处理后的结果。你的代码中没有为result分配内存,因此strcpy函数无法将结果复制到result所指向的内存地址中。
你可以使用malloc函数在函数内部分配一定大小的内存空间,然后将处理后的结果存储在这个内存空间中,并在函数结束时返回这个指针。
以下是修改后的代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *remove_digits(const char *str)
{
int i = 0;
char *result = malloc(strlen(str) + 1); // 分配内存空间
if (!result) {
printf("内存分配失败\n");
return NULL;
}
while (*str != '\0') {
if (*str < '0' || *str > '9') {
result[i++] = *str;
}
str++;
}
result[i] = '\0';
return result;
}
int main()
{
char a[99];
char *b;
gets(a);
b = remove_digits(a);
printf("结果为:%s\n", a);
printf("结果为:%s\n", b);
free(b); // 释放内存空间
return 0;
}
在函数remove_digits中,首先使用malloc函数为result分配了一个长度为strlen(str)+1的内存空间,保证了空间大小的足够。然后在函数中将处理后的结果存储在这个内存空间中,并在函数结束时返回了指向这个内存空间的指针。
在main函数中,将返回的指针赋值给了变量b,然后输出结果后再使用free函数释放了分配的内存空间,避免内存泄漏。
用没用同时保留str和result 的办法,就是char *remove_digits(const char *str,char *result)这个不动
你的算法效率比较低
#include<stdio.h>
#include<string.h>
#include <iostream>
using namespace std;
char* remove_digits(char* str, char* result)
{
if(str==nullptr)
return nullptr;
char* p1,*p2;
p1=str;
p2=result;
while (*p1 != '\0')
{
if (*p1 > '0' && *p1 <= '9') {
p1++;
}
else
{
*p2=*p1;
p2++;
p1++;
}
}
*p2='\0';
cout<<result<<endl;
return result;
}
int main()
{
char a[99];
char b[99];
::gets_s(a);
//scanf("%s",&a);
remove_digits(a, b);
printf("结果为:%s\n", a);
printf("结果为:%s\n", b);
return 0;
}