从c中的输入字符串中删除字符
Removing characters from an input string in c
我的 objective 是从 C 中的字符串中删除用户定义的字符数。
该代码要求用户输入一个字符串,指明他们要删除的字符的开头,并指出他们要从该位置删除多少个字符,然后代码显示结果。
我希望有人能想出一个代码来完成所需的功能和分步信息,因为我昨天才开始编码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a,b;
char text[20];
char new_sentence[20];
int how_much;
void removeString(char* text, int b, int how_much);
int main(void)
{
printf("\nEnter your sentence: ");
gets(text);
printf("\nWhere to start: ");
scanf("%d",&a);
printf("\nHow many characters do you want to remove: ");
scanf("%d",&how_much);
removeString(char* text, int b, int how_much);
printf("\nNew sentence: %s",text);
return 0;
}
void removeString(char* text, int b, int how_much)
{
how_much = b - a;
memmove(&text[a], &text[b],how_much);
}
我不会为您编写代码,因为您提供的示例代码确实是一个最小的示例,但这些是您应该做的事情:
- 将
removeString()
函数签名(及其主体)更改为 removeString(char* your_string, int where_to_start, int how_much_to_cut)
。请注意,在 C char[]
中等同于 char*
,在您的情况下,最好将 char*
传递给您的函数,因为您将拥有可变长度的字符串。
- 使用
strlen()
函数计算传递给removeString()
函数的字符串长度(即char*
)。您可以根据以这种方式计算的长度对参数进行错误检查。
- 请注意,在某些情况下,您可能必须在字符串中间剪切一些字符 - 因此,我会计算结果字符串的长度,并且
realloc()
[=20] =] 或 malloc()
新字符串和 return 它来自 removeString()
函数。
- 您可以按照 this webpage 上的信息向您的程序添加输入参数(字符串、要剪切的位置、要剪切的字符数)。
编辑:
您可以在下面查看您的问题的解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20
char* removeString(char* text, int where_to_start, int how_much)
{
// You should consider all the special (invalid) cases here
// I'm demonstrating how to handle common case
size_t len = strlen(text);
char* new_string = (char*) malloc(sizeof(char) * len - how_much);
memcpy(new_string, text, where_to_start);
memcpy(new_string+where_to_start, text+where_to_start+how_much, len-where_to_start-how_much);
return new_string;
}
int main(void)
{
int a,b;
char buffer[MAX_LEN];
printf("Enter your sentence:\n");
scanf("%s", buffer);
printf("Where to start:\n");
scanf("%d",&a);
printf("How many characters do you want to remove:\n");
scanf("%d",&b);
char* removed = removeString(buffer, a, b);
printf("New sentence: %s\n", removed);
free(removed);
return 0;
}
我的 objective 是从 C 中的字符串中删除用户定义的字符数。
该代码要求用户输入一个字符串,指明他们要删除的字符的开头,并指出他们要从该位置删除多少个字符,然后代码显示结果。
我希望有人能想出一个代码来完成所需的功能和分步信息,因为我昨天才开始编码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a,b;
char text[20];
char new_sentence[20];
int how_much;
void removeString(char* text, int b, int how_much);
int main(void)
{
printf("\nEnter your sentence: ");
gets(text);
printf("\nWhere to start: ");
scanf("%d",&a);
printf("\nHow many characters do you want to remove: ");
scanf("%d",&how_much);
removeString(char* text, int b, int how_much);
printf("\nNew sentence: %s",text);
return 0;
}
void removeString(char* text, int b, int how_much)
{
how_much = b - a;
memmove(&text[a], &text[b],how_much);
}
我不会为您编写代码,因为您提供的示例代码确实是一个最小的示例,但这些是您应该做的事情:
- 将
removeString()
函数签名(及其主体)更改为removeString(char* your_string, int where_to_start, int how_much_to_cut)
。请注意,在 Cchar[]
中等同于char*
,在您的情况下,最好将char*
传递给您的函数,因为您将拥有可变长度的字符串。 - 使用
strlen()
函数计算传递给removeString()
函数的字符串长度(即char*
)。您可以根据以这种方式计算的长度对参数进行错误检查。 - 请注意,在某些情况下,您可能必须在字符串中间剪切一些字符 - 因此,我会计算结果字符串的长度,并且
realloc()
[=20] =] 或malloc()
新字符串和 return 它来自removeString()
函数。 - 您可以按照 this webpage 上的信息向您的程序添加输入参数(字符串、要剪切的位置、要剪切的字符数)。
编辑:
您可以在下面查看您的问题的解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20
char* removeString(char* text, int where_to_start, int how_much)
{
// You should consider all the special (invalid) cases here
// I'm demonstrating how to handle common case
size_t len = strlen(text);
char* new_string = (char*) malloc(sizeof(char) * len - how_much);
memcpy(new_string, text, where_to_start);
memcpy(new_string+where_to_start, text+where_to_start+how_much, len-where_to_start-how_much);
return new_string;
}
int main(void)
{
int a,b;
char buffer[MAX_LEN];
printf("Enter your sentence:\n");
scanf("%s", buffer);
printf("Where to start:\n");
scanf("%d",&a);
printf("How many characters do you want to remove:\n");
scanf("%d",&b);
char* removed = removeString(buffer, a, b);
printf("New sentence: %s\n", removed);
free(removed);
return 0;
}