【发布时间】:2020-09-04 04:40:44
【问题描述】:
我有一个名为 pos 的字符串,我想在字符串中间插入整数。我是 C 的新手。
我的代码是
char *pos;
int i = 1;
pos = "(%d)",i;
printf("%s",pos);
我得到这个输出(%d)
而我想要(1)
如果我的方法有误,请纠正我。
我知道我可以直接打印,但我想在程序中使用变量。
编辑:我已经从 C++ 切换,我还没有阅读太多关于指针的内容
函数定义定义在int program_list(char *programs[],int program_len,int progress[],int progress_len)
顺便说一句,我的整个程序是
#include <stdlib.h> // exit()
#include <stdio.h>
#include <string.h>
#include <conio.h> // clrscr(), getch()
#define width 68
#define array_size(arr) ((sizeof(arr))/(sizeof(*arr)))
void ln();
int program_list(char *programs[],int program_len,int progress[],int progress_len);
void get_elements(int arr[],int size);
void display_elements(int arr[],int size);
int insert_element(int arr[],int *size,int pos,int item);
int delete_element(int arr[],int *size,int pos);
int linear_search(int arr[],int beg,int last,int item);
int binary_search(int arr[],int beg,int last,int item);
void swap(int *a,int *b);
int bubble_sort(int arr[],int size);
int main() {
int item,opt,size,pos,arr[20];
int progress[] = {6,7,11,14,15,16};
char *programs[] = {"GCD of 2 nos. using recursion",
"Fibonacci series using recursion",
"Length of string, concatenate 2 strings using pointer",
"Copy a string, extract substring from string using pointers",
"Tower of Hanoi with 3 discs using recursion",
"Insert integer in array",
"Delete integer from array",
"Create linked list and display it",
"Sort N nos. using insertion sort",
"Sort N nos. using selection sort",
"Sort N nos. using bubble sort",
"Sort N nos. using merge sort",
"Sort N nos. using quick sort",
"Binary Search using recursion",
"Linear Search using recursion",
"EXIT"
};
do{
opt = program_list(programs,array_size(programs),progress,array_size(progress));
switch(opt){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
printf("\nEnter size of array : ");
scanf("%d",&size);
printf("Enter elements of array -:");
get_elements(arr,size);
printf("Elements of array -:");
display_elements(arr,size);
printf("At which index you want to insert? : ");
scanf("%d",&pos);
printf("Enter value which you want to insert : ");
scanf("%d",&item);
*arr = insert_element(arr,&size,pos,item);
printf("Elements of array after insertion -:");
display_elements(arr,size);
break;
case 7:
printf("\nEnter size of array : ");
scanf("%d",&size);
printf("Enter elements of array -:");
get_elements(arr,size);
printf("Elements of array -:");
display_elements(arr,size);
printf("Enter index which you want to delete : ");
scanf("%d",&pos);
*arr = delete_element(arr,&size,pos);
printf("Elements of array after deletion -:");
display_elements(arr,size);
break;
case 8:
break;
case 9:
break;
case 10:
break;
case 11:
printf("\nEnter size of array : ");
scanf("%d",&size);
printf("Enter elements of array -:");
get_elements(arr,size);
printf("Elements of array -:");
display_elements(arr,size);
*arr = bubble_sort(arr,size);
printf("Sorted array using bubble sort -:");
display_elements(arr,size);
break;
case 12:
break;
case 13:
break;
case 14:
printf("\nEnter size of array : ");
scanf("%d",&size);
printf("Enter elements of array -:");
get_elements(arr,size);
printf("Elements of array -:");
display_elements(arr,size);
printf("Enter value which you want to search : ");
scanf("%d",&item);
pos = binary_search(arr,0,size-1,item);
if(pos==-1){
printf("%d not found using binary search\n",item);
}
else{
printf("arr[%d] = %d (found using binary search)\n",pos,item);
}
break;
case 15:
printf("\nEnter size of array : ");
scanf("%d",&size);
printf("Enter elements of array -:");
get_elements(arr,size);
printf("Elements of array -:");
display_elements(arr,size);
printf("Enter value which you want to search : ");
scanf("%d",&item);
pos = linear_search(arr,0,size-1,item);
if(pos==-1){
printf("%d not found using linear search\n",item);
}
else{
printf("arr[%d] = %d (found using linear search)\n",pos,item);
}
break;
case 16:
exit(EXIT_SUCCESS);
break;
default:
printf("Enter valid choice!\n");
opt=0;
}
printf("Program finished! Press enter to restart");
getch(); // use getch() two times for linux based OS (modified by me)
getch();
}while( opt>=0 && opt<=array_size(programs) );
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ln(){
printf("\n");
} // function to leave a line
int program_list(char *programs[],int program_len,int progress[],int progress_len){
clrscr();
int opt,i=0,j,k;
char *text,*status,*pos;
while(i>=0 && i<=2){
switch(i){
case 1:
for(j=0;j<program_len;j++){
for(k=0;k<=width;k++){
if(k==0 || k==width) printf("|");
else{
if(linear_search(progress,0,progress_len,j+1)==-1) status=" ";
else status="->";
pos = "(%d) ",(j+1);
text = programs[j];
printf("%s%s%s",status,pos,text);
k=strlen(status)+strlen(pos)+strlen(text);
while(k<width-1){
printf(" ");
k++;
}
}
}
ln();
}
break;
default:
for(j=0;j<=width;j++){
if(j==0 || j==width) printf("+");
else printf("-");
}
ln();
}
i++;
}
printf("\nYour option : ");
scanf("%d",&opt);
return opt;
} // function to display list of programs in beautiful manner
void get_elements(int arr[],int size){
int i;
ln();
for(i=0;i<size;i++){
printf("arr[%d] -> ",i);
scanf("%d",&arr[i]);
}
ln();
} // function to get elements in array
void display_elements(int arr[],int size){
int i;
ln();
for(i=0;i<size;i++){
printf("arr[%d] = %d\n",i,arr[i]);
}
ln();
} // function to display elements of array
int insert_element(int arr[],int *size,int pos,int item){
if (pos>*size){
printf("OVERFLOW\n");
}
else{
int i;
for(i=*size;i>pos;i--){
arr[i]=arr[i-1];
}
arr[pos] = item;
*size = *size+1;
}
return *arr;
} // function to insert element in array
int delete_element(int arr[],int *size,int pos){
if (pos>*size){
printf("OVERFLOW\n");
}
else{
*size = *size-1;
int i;
for(i=pos;i<*size;i++){
arr[i]=arr[i+1];
}
}
return *arr;
} // function to delete element from array
int linear_search(int arr[],int beg,int last,int item){
if (beg<=last){
if(arr[beg]==item){
return beg;
}
return linear_search(arr,beg+1,last,item);
}
return -1;
} // function to search elements using linear search
int binary_search(int arr[],int beg,int last,int item){
if (beg<=last){
int mid;
mid = (beg+last)/2;
if(arr[mid]==item){
return mid;
}
if(arr[mid]>item){
return binary_search(arr,beg,mid-1,item);
}
return binary_search(arr,mid+1,last,item);
}
return -1;
} // function to search elements using binary search
void swap(int *a,int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
} // function to swap numbers
int bubble_sort(int arr[],int size){
int i=0,j;
while(i<size-1){
j=0;
while(j<size-1-i){
if(arr[j]>arr[j+1]){
swap(&arr[j],&arr[j+1]);
}
j++;
}
i++;
}
return *arr;
} // function to sort array using bubble sorting
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
【问题讨论】:
-
您是否尝试过通过阅读 C 书籍或教程来正确学习该语言?或者通过搜索关于如何做你想做的事的例子来做任何基础研究?
-
@kaylum 抱歉,我还没有对 C 进行更多研究
-
没有内置操作可以插入到 C 字符串的中间。您需要将结果放入一个新字符串中。
-
数组和
snprintf? (char pos[16]; snprintf(pos, sizeof pos, "(%d)", i);) -
如果您的程序通过代码在内部构造格式字符串,它可以在需要时插入数据,而不是构造格式字符串。如果格式字符串是由用户输入的,那么您应该立即停止,因为这会为您的程序打开各种滥用和安全漏洞。