我是C语言的新手,我没有走在正确的轨道上。我目前专注于我的 C 编程考试,但我目前不适应内存分配。作为一个新手,我不知道我是否可以解决这个问题,因为我对此一无所知。我故意对名称的大小(只是名字和姓氏,中间有一个空格(和作业的大小设置了限制。另外,请查看分配的内存大小,我不完全确定它是否正确。我举个例子。
编辑修复的主要问题:
不需要转换。 例如字符串[i]=字符。
输入:
1. NAME: Elton Rana
2. JOB: Programmer
输出:
Elton (Programmer) Rana
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char name[20], job[20];
scanf("%[^n]s",name);
scanf("%s",job);
char space=' ';
char character1='(';
char character2=')';
char* fullname=(char*) malloc((4+strlen(name)+strlen(job)) * sizeof(char));
int savepos;
for(int i=0; i<20; i++){
if((char)name[i]==space){ //position of the space between name and last name
savepos=i;
break;
}
}
int k=0,h=0;
for(int i=0; i<100; i++){
if(i==savepos){
fullname[i]= space; //places a space
i++;
fullname[i]= character1; //places a (
}else if(i==(h+strlen(job)+2)){
fullname[i]= character2; //places a )
i++;
fullname[i]= space; //places a space
}else if(i<(strlen(name)+strlen(job)+2) && i>savepos+1){
fullname[i]= job[k]; //places the job's name between ()
k++;
}else{
fullname[i]=name[h]; //places the name
h++;
if(name[h]==' '){
fullname[i]=' ';
break;
}
}
}
printf("%sn",fullname);
free(fullname);
}
你不需要任何这些强制转换来字符。
此外,无论如何,您确实无法将表达式转换为普通旧值(非指针(类型的左侧。这是一个编译器错误。
取而代之的是:
(char) fullname[i]= space; //places a space
这就足够了:
fullname[i]= space; //places a space
同样地:
(char) fullname[i]= (char) name[h];
可以只是这个:
fullname[i]= name[h];
伙计!
在我看来,我建议您用strtok()
来参考sprintf()
。
如果您需要更具体的帮助,请给我留言:D
当您使用sprintf()
时,您可以在所需的位置打印内容。
例如,printf()
是sprintf(stdout, "Hello worldn")
。
在这种情况下,我们将stdout
称为流。
(不用担心,当时间流逝时,你会自己理解stream
(
因此,您可以轻松地用spirntf()
填充字符数组
sprintf(fullname, "%s (%s)%s", lastName, job, firstName)
就像,"嘿,printf("%s (%s)%sn", lastName, job, firstName)
fullname
">
我们如何才能使name
变得lastName
和firstName
?
在这种情况下,我们可以使用strtok()
。
char *lastName = strtok(name, " ");
char *firstName = strtok(NULL, " ");
最后,它会是这样的。
#include <stdio.h>
#include <string.h>
int main()
{
char name[20];
char job[20];
scanf("%[^n]s", name);
scanf("%s", job);
char allocatedBuffer[100];
char *lastName = strtok(name, " ");
char *firstName = strtok(NULL, " ");
sprintf(allocatedBuffer, "%s (%s)%s", lastName, job, firstName);
printf("%sn", allocatedBuffer);
return 0;
}