如何在给定索引的情况下更改字符串中字符的值? void changeChar(节点**当前){ int i; 内伦; 整数指数; char*p; char final[32]; 字符拷贝[32]; char-usr; 节点*温度; temp=(NODE*)malloc(sizeof(NODE)); strcpy(副本,(*当前)->数据); len=strlen(副本)-1; printf(“输入索引:”); scanf(“%d”和索引); 如果(指数len){ printf(“错误!\n”); } 否则{ printf(“输入字符:”); scanf(“%s”&usr); *(复制+索引)=usr;//仅当索引==0时有效?? } strcpy(临时->数据,复制); temp->next=NULL; 温度->上一个=*当前; (*当前)->next=温度; *当前=(*当前)->下一步; }
嘿,我们的任务是创建一个双链接列表,它的一个特性是,您必须能够在给定索引的情况下更改字符串的字符。关于如何完成这项工作,你有什么想法吗?你有一些问题要解决。未使用的变量i,final。malloc没有免费的。 因为您只替换一个字符,而不添加任何内容,所以不需要malloc。您的指针数学(复制+索引)可能没有按预期的大小递增,您确实希望按节点大小递增 一个更安全的替代方法是摆脱temp并执行以下操作:如何在给定索引的情况下更改字符串中字符的值? void changeChar(节点**当前){ int i; 内伦; 整数指数; char*p; char final[32]; 字符拷贝[32]; char-usr; 节点*温度; temp=(NODE*)malloc(sizeof(NODE)); strcpy(副本,(*当前)->数据); len=strlen(副本)-1; printf(“输入索引:”); scanf(“%d”和索引); 如果(指数len){ printf(“错误!\n”); } 否则{ printf(“输入字符:”); scanf(“%s”&usr); *(复制+索引)=usr;//仅当索引==0时有效?? } strcpy(临时->数据,复制); temp->next=NULL; 温度->上一个=*当前; (*当前)->next=温度; *当前=(*当前)->下一步; },c,string,indexing,doubly-linked-list,C,String,Indexing,Doubly Linked List,嘿,我们的任务是创建一个双链接列表,它的一个特性是,您必须能够在给定索引的情况下更改字符串的字符。关于如何完成这项工作,你有什么想法吗?你有一些问题要解决。未使用的变量i,final。malloc没有免费的。 因为您只替换一个字符,而不添加任何内容,所以不需要malloc。您的指针数学(复制+索引)可能没有按预期的大小递增,您确实希望按节点大小递增 一个更安全的替代方法是摆脱temp并执行以下操作: void changeChar(NODE **current){ int i;
void changeChar(NODE **current){
int i;
int len;
int index;
char *p;
char final[32];
char copy[32];
char usr;
NODE * temp;
temp = (NODE *)malloc(sizeof(NODE));
strcpy(copy, (*current)->data);
len = strlen(copy)-1;
printf("Enter index: ");
scanf("%d", &index);
if(index < 0){
printf("Error!\n");
}
else if(index > len){
printf("Error!\n");
}
else{
printf("Enter character: ");
scanf("%s", &usr);
*(copy + index) = usr; //Only works if index == 0??
}
strcpy(temp->data, copy);
temp->next = NULL;
temp->prev = *current;
(*current)->next = temp;
*current = (*current)->next;
}
(i=0;i
{
*当前=(*当前)->下一步
}
(*当前)->数据=usr;
您希望读取字符,而不是整个字符串,因此scanf(“%s”,&usr)代码>应该是scanf(“%c”和&usr)代码>index>len
应该是index>=len
。
for (i = 0; i < index; i++)
{
*current = (*current)->next
}
(*current)->data = usr;