#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STRING 256
#define CMD_MAX_LINE 5
#define MAX_DATA 10
#define TRUE 1
#define FALSE -1
#define CMD_ADD "add"
#define CMD_DEL "del"
#define CMD_INSERT "insert"
#define CMD_LIST "list"
#define CMD_END "0"
#define CMD_VALUE_ADD 1
#define CMD_VALUE_DEL 2
#define CMD_VALUE_INSERT 3
#define CMD_VALUE_LIST 4
#define CMD_VALUE_END 0
struct list *add_list(int listDataNum, struct list *header);
struct list *insert_list(int listDataNum, struct list *header);
struct list *del_list(int key, struct list *header);
int std_list(struct list *listPointer);
int strToKey(char dataStr[MAX_STRING]);
int checkCmd(char *str);
int storeData(char *data, int dataNumber);
int countData(char *str);
struct list{
int key;
char name[MAX_STRING];
struct list *next;
};
struct data{
int dKey;
char dName[MAX_STRING];
};
char listData[MAX_DATA][MAX_STRING] ={NULL};
int currentDataNum = 1;
int main()
{
char str[MAX_STRING] = {NULL};
char data[MAX_STRING] ={NULL};
struct list *header;
int key = 0;
int i;
int brank = FALSE;
int cmdResult = 0;
int storeResult = 0;
int countDataResult = 0;
header = NULL;
while(str[0] != '0'){
/*初期化*/
for(i = 0; i< MAX_STRING;i++){
str[i] = NULL;
}
/* メニュー表示 */
printf("[menu]\n");
printf("cmd:add\n");
printf("cmd:insert\n");
printf("cmd:del*\n");
printf("cmd:list\n");
printf("End:0\n");
/* 入力 */
fgets(str,sizeof(str),stdin);
str[strlen(str)-1] = '\0';
/* コマンド検知 */
cmdResult = checkCmd(str);
/* データの数の確認 */
countDataResult = countData(str);
/* 対象データの格納 */
storeResult = storeData(str,i);
/* 該当コマンドへ */
switch(cmdResult){
case CMD_VALUE_ADD:
for(i = 0;i < countDataResult;i++){
header = add_list(i,header);
}
break;
case CMD_VALUE_DEL:
for(i = 0;i < countDataResult;i++){
header = del_list(i,header);
}
break;
case CMD_VALUE_INSERT:
for(i = 0;i < countDataResult;i++){
header = insert_list(i,header);
}
break;
case CMD_VALUE_LIST:
std_list(header);
break;
case CMD_VALUE_END:
printf("終了します。\n");
break;
default:
printf("もう一度入力してください。\n");
break;
}
}
return 0;
}
/* コマンド検知関数 */
int checkCmd(char *str){
int i;
int brank = 0;
int brankTrue = 0;
char cmd[MAX_STRING]={NULL};
printf("CMD\n");
/* コマンド検知 */
for(i = 0;i < MAX_STRING; i++){
if(str[i] == ' ' && brankTrue == 0){
brank = i;
brankTrue = 1;
}
}
for(i = 0; i < brank ;i++){
cmd[i] = str[i];
}
printf("cmd:%s\n",cmd);
if(strcmp(cmd,CMD_ADD) == 0){
printf("1\n");
return 1;
}
else if(strcmp(cmd,CMD_DEL) == 0){
printf("2\n");
return 2;
}
else if(strcmp(cmd,CMD_INSERT) == 0){
printf("3\n");
return 3;
}
else if(strcmp(str,CMD_LIST) == 0){
printf("4\n");
return 4;
}
else if(strcmp(str,CMD_END) == 0){
printf("0\n");
return 0;
}
else{
return FALSE;
}
}
/* データ数判定関数*/
int countData(char *str){
int i;
int dataCount = 0;
for(i = 0;i < MAX_STRING; i++){
if(str[i] == ' '){
dataCount++;
}
}
return dataCount;
}
/* データ格納関数 */
int storeData(char *str, int dataNumber){
int i,j,k = 0;
int brank[MAX_DATA];
int brankNum = 0;
char data[MAX_STRING] = {NULL};
/* 初期化 */
memset(listData, NULL, sizeof(listData));
/* 空白の場所を記憶する */
for(i = 0,j = 0;i < MAX_STRING; i++){
if(str[i] == ' '){
brank[j] = i;
j++;
}
}
brankNum = j;
printf("brankNum = %d\n",brankNum);
for(k = 0;k < brankNum;k++){
for(i = 0, j = brank[k] + 1 ;str[j] != '\0'; i++,j++){
if(str[j] != ' '){
listData[k][i] = str[j];
printf("%c",listData[k][i]);
}
else{
}
}
listData[k][i] = '\0';
}
printf("\n");
for(k = 0;k < brankNum;k++){
printf("listData[%d] = %s\n",k,listData[k]);
}
return TRUE;
}
/* リスト追加関数*/
struct list *add_list(int listDataNum, struct list *header){
struct list *pList;
/* 領域確保 */
if ((pList = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(EXIT_FAILURE);
}
/* リストにデータを登録 */
pList->key = currentDataNum;
strcpy(pList->name, listData[listDataNum]);
/* ポインタのつなぎ換え */
pList->next= header; /* 今までの先頭ポインタを次ポインタに */
header = pList; /* 新たな領域を先頭ポインタに */
currentDataNum++;
return header;
}
struct list *insert_list(int listDataNum, struct list *header){
struct list *pList, *add_pList;
/* 新規リストにデータを登録 */
if ((add_pList = (struct list *)malloc( sizeof( struct list))) == NULL ) {
printf("malloc ERROR\n");
exit(EXIT_FAILURE);
}
add_pList->key = currentDataNum;
strcpy(add_pList->name, listData[listDataNum]);
/* キーが最大のとき */
if ( header == NULL || currentDataNum > header->key ) {
/* ポインタのつなぎ換え */
add_pList->next = header;
return add_pList;
}
/* キーのサーチ */
for(pList = header; pList->next != NULL; pList = pList->next){
if(currentDataNum > pList->next->key ){
break;
}
}
/* ポインタのつなぎ換え */
add_pList->next = pList->next;
pList->next = add_pList;
return header;
}
/* リスト削除関数*/
struct list *del_list(int listDataNum, struct list *header){
struct list *pList;
struct list *last_pList;
pList = header;
last_pList = header;
/* キーをサーチする */
while(pList != NULL) {
if(strcmp(listData[listDataNum],pList->name) == 0){ //名前が一致
/* header(先頭)のキーが一致したら、次のポインタをheaderに指定する*/
if(pList == header){
header = pList->next;
currentDataNum--;
}
/* 1つ前のポインタのあて先を現在参照しているデータの次のあて先を指定する*/
else{
last_pList->next = pList->next;
currentDataNum--;
}
free( pList );
return header;
}
last_pList = pList; //1つ前のポインタを記録する
pList = pList->next; //キーが見つかるか、NULLまで進める
}
currentDataNum--;
printf( "名前が見つかりません\n");
return header;
}
/* リスト表示関数 */
int std_list(struct list *listPointer){
printf("-------------\n");
while (listPointer != NULL) { /* 次ポインタがNULLまで処理 */
printf("[%d] Name:%s\n", listPointer->key, listPointer->name);
listPointer = listPointer->next;
}
printf("-------------\n");
return 0;
}
/* リスト追加関数*/
/*
struct list *add_list(int listDataNum, struct list *header){
struct list *pList;
/* 領域確保
if ((pList = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(EXIT_FAILURE);
}
/* リストにデータを登録
pList->key = currentDataNum;
strcpy(pList->name, listData[listDataNum]);
/* ポインタのつなぎ換え
pList->next= header; /* 今までの先頭ポインタを次ポインタに
header = pList; /* 新たな領域を先頭ポインタに
currentDataNum++;
return header;
}
*/
/* 文字列からKEYを特定する */
/*
int strToKey(char dataStr[MAX_STRING]){
if(strcmp(dataStr,"A") == 0){
return list_A.dKey;
}
else if(strcmp(dataStr,"B") == 0){
return list_B.dKey;
}
else if(strcmp(dataStr,"C") == 0){
return list_C.dKey;
}
return FALSE;
}
*/
2014/02/23
2014/02/19
リスト作成 02/20
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STRING 256
#define CMD_MAX_LINE 5
#define TRUE 1
#define FALSE -1
struct list *add_list(char dataStr[MAX_STRING], struct list *header);
struct list *del_list(int key, struct list *header);
int std_list(struct list *listPointer);
int strToKey(char dataStr[MAX_STRING]);
struct list{
int key;
char name[MAX_STRING];
struct list *next;
};
struct data{
int dKey;
char dName[MAX_STRING];
};
struct data list_A={1,"Aさん"};
struct data list_B={2,"Bさん"};
struct data list_C={3,"Cさん"};
struct list dList[3]={
{1,"Aさん",},
{2,"Bさん",},
{3,"Cさん",},
};
char cmd_Add[CMD_MAX_LINE] = "add";
char cmd_Del[CMD_MAX_LINE] = "del";
char cmd_List[CMD_MAX_LINE] = "list";
int main()
{
char str[MAX_STRING] = {NULL};
char cmd[CMD_MAX_LINE] = {NULL};
char data[MAX_STRING] ={NULL};
struct list *header;
struct list *pList;
int key = 0;
int i,j;
int brank = FALSE;
header = NULL;
while(str[0] != '0'){
/*初期化*/
for(i = 0; i< MAX_STRING;i++){
str[i] = NULL;
}
for(i = 0; i< CMD_MAX_LINE;i++){
cmd[i] = NULL;
}
/* メニュー表示 */
printf("[menu]\n");
printf("cmd:add_*\n");
printf("cmd:del_*\n");
printf("cmd:list_all\n");
printf("End:0\n");
/* 入力 */
scanf("%s",&str);
/* コマンド検知 */
for(i = 0;i < MAX_STRING; i++){
if(str[i] == '_'){
brank = i;
}
}
/* 終了処理 */
if(str[0] == '0'){
printf("終了します。\n");
break;
}
else if(brank == FALSE){
printf("コマンドが違います。\n");
}
else{
/* コマンド格納 */
for(i = 0;i < brank; i++){
cmd[i] = str[i];
}
/* 対象データの格納 */
printf("data[i] = ");
for(i = 0, j = brank + 1 ;str[i] != '\0'; i++,j++){
data[i] = str[j];
printf("%c",data[i]);
}
data[i] = '\0';
printf("\n");
}
printf("cmd = %s\n",cmd);
printf("data = %s\n",data);
if(strcmp(cmd,cmd_Add) == 0){
//printf("add:\n");
header = add_list(data,header);
}
else if(strcmp(cmd,cmd_Del) == 0){
printf("del:\n");
key = strToKey(data);
header = del_list(key,header);
}
else if(strcmp(cmd,cmd_List) == 0){
//printf("list:\n");
std_list(header);
}
else if(cmd[0] == '0'){
printf("終了\n");
}
else{
printf("もう一度入力してください。\n");
}
}
return 0;
}
struct list *add_list(char dataStr[MAX_STRING], struct list *header){
struct list *pList;
/* 領域確保 */
if ((pList = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(EXIT_FAILURE);
}
/* リストにデータを登録 */
if(strcmp(dataStr,"A") == 0){
pList->key = list_A.dKey;
strcpy(pList->name, list_A.dName);
}
else if(strcmp(dataStr,"B") == 0){
pList->key = list_B.dKey;
strcpy(pList->name, list_B.dName);
}
else if(strcmp(dataStr,"C") == 0){
pList->key = list_C.dKey;
strcpy(pList->name, list_C.dName);
}
else{
printf("そのようなデータは持ち合わせておりません。\n");
}
/* ポインタのつなぎ換え */
pList->next= header; /* 今までの先頭ポインタを次ポインタに */
header = pList; /* 新たな領域を先頭ポインタに */
return header;
}
struct list *del_list(int key, struct list *header){
struct list *pList;
struct list *last_pList;
pList = header;
last_pList = header;
/* キーをサーチする */
while(pList != NULL) {
if(key == pList->key){ //キーが一致
/* header(先頭)のキーが一致したら、次のポインタをheaderに指定する*/
if(pList == header){
header = pList->next;
}
/* 1つ前のポインタのあて先を現在参照しているデータの次のあて先を指定する*/
else{
last_pList->next = pList->next;
}
free( pList );
return header;
}
last_pList = pList; //1つ前のポインタを記録する
pList = pList->next; //キーが見つかるか、NULLまで進める
}
printf( "キー%dが見つかりません\n", key );
return header;
}
/* リスト表示関数 */
int std_list(struct list *listPointer){
printf("-------------\n");
while (listPointer != NULL) { /* 次ポインタがNULLまで処理 */
printf("[%d] Name:%s\n", listPointer->key, listPointer->name);
listPointer = listPointer->next;
}
printf("-------------\n");
return 0;
}
/* 文字列からKEYを特定する */
int strToKey(char dataStr[MAX_STRING]){
if(strcmp(dataStr,"A") == 0){
return list_A.dKey;
}
else if(strcmp(dataStr,"B") == 0){
return list_B.dKey;
}
else if(strcmp(dataStr,"C") == 0){
return list_C.dKey;
}
return FALSE;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STRING 256
#define CMD_MAX_LINE 5
#define TRUE 1
#define FALSE -1
struct list *add_list(char dataStr[MAX_STRING], struct list *header);
struct list *del_list(int key, struct list *header);
int std_list(struct list *listPointer);
int strToKey(char dataStr[MAX_STRING]);
struct list{
int key;
char name[MAX_STRING];
struct list *next;
};
struct data{
int dKey;
char dName[MAX_STRING];
};
struct data list_A={1,"Aさん"};
struct data list_B={2,"Bさん"};
struct data list_C={3,"Cさん"};
struct list dList[3]={
{1,"Aさん",},
{2,"Bさん",},
{3,"Cさん",},
};
char cmd_Add[CMD_MAX_LINE] = "add";
char cmd_Del[CMD_MAX_LINE] = "del";
char cmd_List[CMD_MAX_LINE] = "list";
int main()
{
char str[MAX_STRING] = {NULL};
char cmd[CMD_MAX_LINE] = {NULL};
char data[MAX_STRING] ={NULL};
struct list *header;
struct list *pList;
int key = 0;
int i,j;
int brank = FALSE;
header = NULL;
while(str[0] != '0'){
/*初期化*/
for(i = 0; i< MAX_STRING;i++){
str[i] = NULL;
}
for(i = 0; i< CMD_MAX_LINE;i++){
cmd[i] = NULL;
}
/* メニュー表示 */
printf("[menu]\n");
printf("cmd:add_*\n");
printf("cmd:del_*\n");
printf("cmd:list_all\n");
printf("End:0\n");
/* 入力 */
scanf("%s",&str);
/* コマンド検知 */
for(i = 0;i < MAX_STRING; i++){
if(str[i] == '_'){
brank = i;
}
}
/* 終了処理 */
if(str[0] == '0'){
printf("終了します。\n");
break;
}
else if(brank == FALSE){
printf("コマンドが違います。\n");
}
else{
/* コマンド格納 */
for(i = 0;i < brank; i++){
cmd[i] = str[i];
}
/* 対象データの格納 */
printf("data[i] = ");
for(i = 0, j = brank + 1 ;str[i] != '\0'; i++,j++){
data[i] = str[j];
printf("%c",data[i]);
}
data[i] = '\0';
printf("\n");
}
printf("cmd = %s\n",cmd);
printf("data = %s\n",data);
if(strcmp(cmd,cmd_Add) == 0){
//printf("add:\n");
header = add_list(data,header);
}
else if(strcmp(cmd,cmd_Del) == 0){
printf("del:\n");
key = strToKey(data);
header = del_list(key,header);
}
else if(strcmp(cmd,cmd_List) == 0){
//printf("list:\n");
std_list(header);
}
else if(cmd[0] == '0'){
printf("終了\n");
}
else{
printf("もう一度入力してください。\n");
}
}
return 0;
}
struct list *add_list(char dataStr[MAX_STRING], struct list *header){
struct list *pList;
/* 領域確保 */
if ((pList = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(EXIT_FAILURE);
}
/* リストにデータを登録 */
if(strcmp(dataStr,"A") == 0){
pList->key = list_A.dKey;
strcpy(pList->name, list_A.dName);
}
else if(strcmp(dataStr,"B") == 0){
pList->key = list_B.dKey;
strcpy(pList->name, list_B.dName);
}
else if(strcmp(dataStr,"C") == 0){
pList->key = list_C.dKey;
strcpy(pList->name, list_C.dName);
}
else{
printf("そのようなデータは持ち合わせておりません。\n");
}
/* ポインタのつなぎ換え */
pList->next= header; /* 今までの先頭ポインタを次ポインタに */
header = pList; /* 新たな領域を先頭ポインタに */
return header;
}
struct list *del_list(int key, struct list *header){
struct list *pList;
struct list *last_pList;
pList = header;
last_pList = header;
/* キーをサーチする */
while(pList != NULL) {
if(key == pList->key){ //キーが一致
/* header(先頭)のキーが一致したら、次のポインタをheaderに指定する*/
if(pList == header){
header = pList->next;
}
/* 1つ前のポインタのあて先を現在参照しているデータの次のあて先を指定する*/
else{
last_pList->next = pList->next;
}
free( pList );
return header;
}
last_pList = pList; //1つ前のポインタを記録する
pList = pList->next; //キーが見つかるか、NULLまで進める
}
printf( "キー%dが見つかりません\n", key );
return header;
}
/* リスト表示関数 */
int std_list(struct list *listPointer){
printf("-------------\n");
while (listPointer != NULL) { /* 次ポインタがNULLまで処理 */
printf("[%d] Name:%s\n", listPointer->key, listPointer->name);
listPointer = listPointer->next;
}
printf("-------------\n");
return 0;
}
/* 文字列からKEYを特定する */
int strToKey(char dataStr[MAX_STRING]){
if(strcmp(dataStr,"A") == 0){
return list_A.dKey;
}
else if(strcmp(dataStr,"B") == 0){
return list_B.dKey;
}
else if(strcmp(dataStr,"C") == 0){
return list_C.dKey;
}
return FALSE;
}
2014/02/16
-作成中-リスト生成
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#define MAX_STRING 256
#define CMD_MAX_LINE 5
struct list{
int key;
char name[MAX_STRING];
struct list *next;
};
char cmd_Add[CMD_MAX_LINE] = "add_";
char cmd_Del[CMD_MAX_LINE] = "del_";
char cmd_List[CMD_MAX_LINE] = "list";
int main()
{
char str[MAX_STRING] = {NULL};
char cmd[CMD_MAX_LINE] = {NULL};
struct list *header;
int key = 0;
int i;
header = NULL;
while(str[0] != '0'){
/*初期化*/
for(i = 0;i<MAX_STRING;i++){
str[i] = NULL;
}
/*
for(i = 0;i<CMD_MAX_LINE;i++){
cmd[i] = NULL;
}*/
printf("[menu]\n");
printf("cmd:add_*\n");
printf("cmd:del_*\n");
printf("cmd:list\n");
printf("End:0\n");
scanf("%s",&str);
for(i = 0;str[i] != '_'; i++){
cmd[i] = str[i];
}
cmd[i] = '_';
printf("cmd(str) = %s\n",cmd);
if(strcmp(cmd,cmd_Add) == 0){
printf("add:\n");
}
else if(strcmp(cmd,cmd_Del) == 0){
printf("del:\n");
}
else if(strcmp(cmd,cmd_List) == 0){
printf("list:\n");
}
else if(cmd[0] == '0'){
printf("終了\n");
}
else{
printf("もう一度入力してください。\n");
}
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define MAX_STRING 256
#define CMD_MAX_LINE 5
struct list{
int key;
char name[MAX_STRING];
struct list *next;
};
char cmd_Add[CMD_MAX_LINE] = "add_";
char cmd_Del[CMD_MAX_LINE] = "del_";
char cmd_List[CMD_MAX_LINE] = "list";
int main()
{
char str[MAX_STRING] = {NULL};
char cmd[CMD_MAX_LINE] = {NULL};
struct list *header;
int key = 0;
int i;
header = NULL;
while(str[0] != '0'){
/*初期化*/
for(i = 0;i<MAX_STRING;i++){
str[i] = NULL;
}
/*
for(i = 0;i<CMD_MAX_LINE;i++){
cmd[i] = NULL;
}*/
printf("[menu]\n");
printf("cmd:add_*\n");
printf("cmd:del_*\n");
printf("cmd:list\n");
printf("End:0\n");
scanf("%s",&str);
for(i = 0;str[i] != '_'; i++){
cmd[i] = str[i];
}
cmd[i] = '_';
printf("cmd(str) = %s\n",cmd);
if(strcmp(cmd,cmd_Add) == 0){
printf("add:\n");
}
else if(strcmp(cmd,cmd_Del) == 0){
printf("del:\n");
}
else if(strcmp(cmd,cmd_List) == 0){
printf("list:\n");
}
else if(cmd[0] == '0'){
printf("終了\n");
}
else{
printf("もう一度入力してください。\n");
}
}
return 0;
}
2014/02/11
コメントはずし
#include "stdafx.h"
#include <stdio.h>
#define TRUE 1
#define FALSE -1
#define STRING_SIZE 256
int startPoint = 0;
int endPoint = 0;
int checkComment(char *);
int stOutput(char *);
int main()
{
char str[STRING_SIZE];
int i = 0;
int comment;
printf("文字を入力したください。\n");
scanf("%s",&str);
comment = checkComment(str);
if(comment == TRUE)
{
stOutput(str);
}
/*
for(i = 0; str[i] != NULL; i++)
{
printf("%c",str[i]);
}
printf("\n");
*/
return 0;
}
int checkComment(char *str)
{
int i = 0;
int startComment = 0;
int endComment = 0;
int checkComment = 0;
for(i = 0; str[i] != NULL; i++)
{
printf("%c",str[i]);
if(str[i] =='/' && str[i+1] =='*')
{
//printf(" /* を発見!!\n");
startComment = TRUE;
startPoint = i;
}
if(startComment == TRUE && str[i] =='*' && str[i+1] =='/')
{
//printf(" */ を発見!!\n");
endComment = TRUE;
endPoint = i + 2;
}
}
printf("\n");
checkComment = startComment * endComment;
return checkComment;
}
int stOutput(char *str)
{
int i = 0;
int j = 0;
//printf("stOutput\n");
for(i = 0; i < startPoint; i++)
{
printf("%c",str[i]);
}
for(j = endPoint; str[j] != NULL ; j++)
{
printf("%c",str[j]);
}
printf("\n");
return 0;
}
#include <stdio.h>
#define TRUE 1
#define FALSE -1
#define STRING_SIZE 256
int startPoint = 0;
int endPoint = 0;
int checkComment(char *);
int stOutput(char *);
int main()
{
char str[STRING_SIZE];
int i = 0;
int comment;
printf("文字を入力したください。\n");
scanf("%s",&str);
comment = checkComment(str);
if(comment == TRUE)
{
stOutput(str);
}
/*
for(i = 0; str[i] != NULL; i++)
{
printf("%c",str[i]);
}
printf("\n");
*/
return 0;
}
int checkComment(char *str)
{
int i = 0;
int startComment = 0;
int endComment = 0;
int checkComment = 0;
for(i = 0; str[i] != NULL; i++)
{
printf("%c",str[i]);
if(str[i] =='/' && str[i+1] =='*')
{
//printf(" /* を発見!!\n");
startComment = TRUE;
startPoint = i;
}
if(startComment == TRUE && str[i] =='*' && str[i+1] =='/')
{
//printf(" */ を発見!!\n");
endComment = TRUE;
endPoint = i + 2;
}
}
printf("\n");
checkComment = startComment * endComment;
return checkComment;
}
int stOutput(char *str)
{
int i = 0;
int j = 0;
//printf("stOutput\n");
for(i = 0; i < startPoint; i++)
{
printf("%c",str[i]);
}
for(j = endPoint; str[j] != NULL ; j++)
{
printf("%c",str[j]);
}
printf("\n");
return 0;
}
登録:
投稿 (Atom)