#include <stdioh>
#include <string>
void swap(char src, char dest)//交换值
{
char tmp = src;
src = dest;
dest = tmp;
}void main()
{
char cID[5] = {"201011110001", "201011110505", "201011110503", "201011110504", "201011110502"};
char cName[5] = {"甲", "乙", "丙", "丁", "戊"};
printf("排序之前: \n");
for (int i=0; i<5; i++)
{
printf("%s %s\n", cName[i], cID[i]);
}
for (i=0; i<5; i++)
{
for (int j=i+1; j<5; j++)
{
if (strcmp( (const char )cID[i], (const char )cID[j]) > 0)
{
swap(&cID[i], &cID[j]);
swap(&cName[i], &cName[j]);
}
}
}
printf("学号排序: \n");
for (i=0; i<5; i++)
{
printf("%s %s\n", cName[i], cID[i]);
}
for (i=0; i<5; i++)
{
for (int j=i+1; j<5; j++)
{
if (strcmp( (const char )cName[i], (const char )cName[j]) > 0)
{
swap(&cID[i], &cID[j]);
swap(&cName[i], &cName[j]);
}
}
} printf("姓名排序: \n");
for (i=0; i<5; i++)
{
printf("%s %s\n", cName[i], cID[i]);
}
}
这个不复杂,但得说清楚是长度升序还是大小升序?
#include "stdioh"#include <stringh>
void lenup(char p[]){
char i,j,k,t;
for(i=0;i<9;i++){
for(k=i,j=k+1;j<10;j++)
if(strlen(p[k])>strlen(p[j]))
k=j;
if(k-i)
t=p[k],p[k]=p[i],p[i]=t;
}
}
void valueup(char p[]){
char i,j,k,t;
for(i=0;i<9;i++){
for(k=i,j=k+1;j<10;j++)
if(strcmp(p[k],p[j])==1)
k=j;
if(k-i)
t=p[k],p[k]=p[i],p[i]=t;
}
}
int main(int argc,char argv[]){
char a[10][30]={"12345","3216","213","abcde","cba","6bca","12a","b23c","3c124","4d5"};
char p[10],i;
for(i=0;i<10;p[i++]=a[i]);
printf("按长度升序排序:\n");
lenup(p);
for(i=0;i<10;printf("%s ",p[i++]));//按长短升序结果
printf("\n按大小升序排序\n");
valueup(p);
for(i=0;i<10;printf("%s ",p[i++]));//按大小升序结果
printf("\n");
return 0;
}
运行结果:
按你的要求选一个……
第一题你好象写错了;
#include
<iostream>
using
namespace
std;
int
main()
{
char
str[]="xyz",ps;
ps=str;
while(ps)
ps++;
for(ps--;ps-str>=0;ps--)
putchar(ps);
return
0;
}
ps=str是正确的,因为你的ps在上边定义的是一个指针。那么下边的赋值运算中就应该是地址之间的传递,str作为数组名,它本身就是一个地址。同时ps也是一个指针。结果就是
xyz
第二题的答案是:
4
5
因为作为形式参数的b在传递到你的调用函数f之后虽然做了++ *** 作但是这个b却只是一个副本,不是真正的b,等这个f函数执行完毕之后就会把这个副本释放掉,对主函数的b并不产生影响。要想修改主函数中的数值,在传递参数的时候只有传递指针,就像你的a那样,给函数传递一个指针就可以。
第三题答案是17
这个题就是把这个数组中的所有奇数项想加
第四题
答案是24
就是把所有偶数的元素都设置成
第五题就是
2
5
8
10
0
整个题目就是把a[4]=a[0]+a[1]+a[2]+a[3]+a[4]
#include<stdioh>
int main()
{
int a[111],max,min,p,n,k=0;
p=a;//指针p指向数组a首地址
do{
scanf("%d",&n);
p[k++]=n;
}while(getchar()!='\n');
max=min=p[0];
for(p=a;p<a+k;p++)
{
if(p>max)
max=p;
if(p<min)
min=p;
}
printf("max=%d,min=%d",max,min);
return 0;
}
第一个问题:
这里,p存的是二维数组str的首元素的首地址,也就是指向str[0][0]。
p是个char
,即指向的对象存的是char类型,所以p+10就是从p指向的位置str[0][0]向后移动了10个char单位。
二维数组定义为str[][10],可以看做是n个一维数组,每个一维数组有10个字符。这里初始化的时候将第一个一维数组初始化为"China",第二个初始化为"Beijing",所以P+10向后移动10个单位后,p就指向了‘B’,所以输出为Beijing。
比如这里不是p+10,而是p+3,那么就向后移动了3个char,指向了‘n’,此时输出就为na。
第二个问题:
首先,要搞清楚,char
p[10]是什么,由于[
]的优先级比高,故p是先和[
]组合,
所以,这里char
p[10]其实是定义了一个指针数组,p是个数组,数组的每个元素都是一个指向char类型的指针,这里定义的时候进行了初始化,将10个指针分别指向了那几个字符串,
char
ptr
=
"abcde";
这个应该理解吧,就是将一个指针指向一个字符串,
char
p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”};一样,不过是定义了10个指针,这10个指针是个数组,每个指针指向一个字符串。
所以p[4]就是指数组的第5个元素,它也是个指针,指向字符串"cd",所以strlen(p[4])=2
以上就是关于字符串指针数组问题,编一个程序,谢谢全部的内容,包括:字符串指针数组问题,编一个程序,谢谢、用C语言编程序:用指针数组处理:在主函数中放10个不等长的字符串(12345 3216 213 a、C语言 指针与数组 求程序输出结果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)