一道c语言编程题 !高手们帮忙解释一下Strmove()函数部分!!O(∩_∩)O谢谢~~~~~~~

作者&投稿:益独 (若有异议请与网页底部的电邮联系)
急需您的帮助,以下C++编程题,必有厚报,真的非常感谢您了O(∩_∩)O~

我觉得#include 就解决了

给题主一个简单的通讯录程序吧 #include #include #define ARRAY_LEN 30/*联系人结构体*//*注:本程序忽略重名现象。若重名则查找时以最后输入的联系人为准。*/typedef struct{char name[10];int age;char sex[10];char mp[13];char tel[13];} friend_list;/*打印所有联系人信息*/void printAll (friend_list friList[], int *friNum) {int i;if (*friNum) {printf ("姓名年龄性别手机家庭
");for (i=0; i<*friNum; i++)printf ("%s%d%s%s%s
",friList[i].name,friList[i].age,friList[i].sex,friList[i].mp,friList[i].tel);printf ("
");}else {printf ("无任何联系人信息!
");printf ("
");}}/*打印联系人信息*/void printFri (friend_list friList[], int index) {if (index==-1) {printf ("查无此人!
");printf ("
");}else {printf ("姓名年龄性别手机家庭
");printf ("%s%d%s%s%s
",friList[index].name,friList[index].age,friList[index].sex,friList[index].mp,friList[index].tel);printf ("
");}}/*按姓名定位联系人所在数组位置*/int findIndex (friend_list friList[], int *friNum, char *tarName) {int i,index;index =-1;for (i=0; i<*friNum; i++)if (strcmp(tarName, friList[i].name) == 0) /*两字符串相等strcmp函数返回0*/index = i; /*定位联系人在结构体数组中的下标*/return index;}/*录入联系人信息*/void addFri (friend_list friList[], int *friNum) {int i = *friNum;printf ("请输入联系人信息:
");printf ("姓名:");scanf ("%s",&friList[i].name); printf ("年龄:");scanf ("%d",&friList[i].age);printf ("性别:");scanf ("%s",&friList[i].sex);printf ("手机:");scanf ("%s",&friList[i].mp);printf ("家庭:");scanf ("%s",&friList[i].tel);*friNum +=1; /*联系人数加1*/printf ("
");}/*按姓名查找联系人信息*/void findFri (friend_list friList[], int *friNum) {int i,index;char tarName[10];printf ("请输入欲查找的联系人姓名:");scanf ("%s",&tarName);printf ("
");index = findIndex (friList, friNum, tarName);printFri (friList, index); /*打印联系人信息*/}/*删除联系人信息*/void delFri (friend_list friList[], int *friNum) {int i,index;char tarName[10];printf ("请输入欲删除的联系人姓名:");scanf ("%s",&tarName);printf ("
");index = findIndex (friList, friNum, tarName);if (index == -1) {printf ("查无此人!
");printf ("
");}else {for (i=index; i<*friNum; i++)friList[i] = friList[i+1]; *friNum-=1;printf ("联系人%s已删除!
",tarName);printf ("
");}}/*修改联系人信息*/void altFri (friend_list friList[], int *friNum) {int index;char tarName[10];printf ("请输入欲修改的联系人姓名:");scanf ("%s",&tarName);printf ("
");index = findIndex (friList, friNum, tarName);if (index == -1) {printf ("查无此人!
");printf ("
");}else {printf ("请重新输入联系人信息:
");printf ("姓名:%s
",friList[index].name);printf ("年龄:");scanf ("%d",&friList[index].age);printf ("性别:");scanf ("%s",&friList[index].sex);printf ("手机:");scanf ("%s",&friList[index].mp);printf ("家庭:");scanf ("%s",&friList[index].tel);printf ("联系人%s信息已修改!
",tarName);printf ("
");}}/*打印菜单*/void printMenu (void) {printf ("======================================================

");printf ("序号功能详情
"); printf ("1新增联系人
"); printf ("2按姓名查找联系人
"); printf ("3按姓名删除联系人
"); printf ("4按姓名修改联系人
"); printf ("5列出所有联系人信息
"); printf ("6退出
"); printf ("
");printf ("======================================================

");}/*输入命令*/int instructions (void) {int key;printf ("请输入功能序号以开启操作:");scanf ("%d",&key);printf ("
");printf ("======================================================

");return key;}int main(void) {int key;int friNum = 0; /*联系人数量*/friend_list friList[ARRAY_LEN]; /*联系人结构体数组*/do {printMenu ();key = instructions (); switch (key){ case 1: addFri (friList, &friNum); break; case 2: findFri (friList, &friNum); break; case 3: delFri (friList, &friNum); break; case 4: altFri (friList, &friNum); break; case 5: printAll (friList, &friNum); break; case 6: printf("程序结束!

"); break; default: printf("输入错误,请重新输入!

");break; } if (key!=6) { printf("按回车键继续
");getchar ();getchar (); }} while(key!=6);return 0;} 运行结果 主界面 新增联系人 查找联系人 删除联系人 修改联系人 列出所有联系人

其实你可以用vc调试一下,走一遍你就知道怎么个流程了.

void Strmove(void)
{
int i, j, k;
char buf[80];
for (i=0; i<maxline; i++) //maxline 是从IN.DAT中读取字符串的行数
{
j = strlen(StrResult[i])-1; // j= 字符串的长度 -1
while (StrResult[i][j]!='o' && j>=0) // 循环 从后往前找到 StrResult[i]字符串中的'o'
j--;
if (j < 0) //当上个循环结束,j如果小于0,证明本字符串中没有'o',就跳到maxline那个主循环
continue;
StrResult[i][j] = 0; //程序走到这,证明StrResult[i][j]='o'所以把StrResult[i][j]置0
strcpy(buf, &StrResult[i][j+1]); //把'o'后面的字符拷到buf里
k = j = 0;
while (StrResult[i][j])
{ while (StrResult[i][j]!='o' && StrResult[i][j]) //继续找'o' 或者 到这句结束
j++;
if (!StrResult[i][j]) //如果这句话结束,就把strresult[i]接到buf后,然后跳出本次循环
{
strcat(buf, &StrResult[i][k]);
break;
}
StrResult[i][j] = 0; //如果找到'o',再把找到的'o'置0
strcat(buf, &StrResult[i][k]); //把上次'o'后到这次找到的'o'之间的字符拷到buf的后面
j++;
k = j; //k是上个找到的'o'的后一个字符
}
strcpy(StrResult[i], buf); //最后,把buf拷回StrResult中.
}
}