此程序可通过以下步骤实现:
1、输入一个正整数
3、求字符串的长度(strlen函数),即正整数的位数
代码如下:
#include <stdioh>#include <stringh>
int main()
{
long num;
char str[20];
scanf("%ld", &num);
sprintf(str, "%ld", num);
printf("%d", strlen(str));
return 0;
}
这样写主要是考虑到整数的前面可能有0,比如:00090,是两位数。如果确认没有前置0的话,可以简化过程,省去转换为字符串的过程,直接用gets得到字符串。
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
#include<stdioh>
#include<stringh>
main()
{
void cmp(char p1,char p2);
char str[3];
int i,n=3, j, k;
for(i=0; i<n; i++)
gets(str[i]);
for(i=0; i<n-1; i++)
{
k=i;
for(j=i+1; j<n; j++)
if(strcmp(str[k],str[j])) k=j;
if(k!=i)
cmp(str[i],str[k]);
}
i=0;
while(i<n)
{
puts(str+i++);
}
}
void cmp(char p1, char p2)
{
char p;
p=p1;
p1=p2;
p2=p1;
}
这是代码,前面还写过其他的代码都没运行成功
我想了半天又改成这样的了
应该没问题了
但是运行后直接提示16子程序什么错误,就立即结束!!!
求助
解析:
几个错误。
1、str三个字符串都没有事先分配空间;
2、交换两个字节串不能直接在函数里将两者指针互换,要用strcpy相互赋值;
3、strcmp(a,b),当a大于b时,返回1,a小于b时返回-1,都不为0,你怎么能直接用if(strcmp(str[k],str[j])) k=j;呢,这样排出来是升序还是降序?你好好想想。
分配空间什么的,你干脆事先定义str[3][80],80这个值你可以改,或者用一个宏来代替,输入的时候不要超过这个值就行了。
#include <stdioh>
#include <stringh>
int main()
{ int i,j;
char s[10][15],t[15];
for(i=0; i<10; i++)
scanf("%s",s[i]);
for(i=0; i<9; i++)
for(j=0; j<9-i; j++)
if(strcmp(s[j],s[j+1])>0)
{ strcpy(t,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],t);
}
for(i=0; i<10; i++)
printf("%s ",s[i]);
return 0;
}
void fun(char str)
{
int i=0,j=0;
char s1[80],s2[80];
char p=str;
while(p)
{
if(isdigit(p))
s1[i++]=(p++);
else s2[j++]=(p++);
}
s1[i]=s2[j]='\0';
strcpy(str,s2);
strcat(str,s1);
}
其实,用链表是最好的,不过题目既然已经给出了用字符串数组,那就只好多用点内存,提高点速度了。
#include "ctypeh"
#include "stringh"
#include <stdioh>
#include <stringh>
void find(char str,char data)
{
int i=0;
int j=0;
int index;
int flag=0;
while((str+i)!='\0')
{
if((str+i)==(data+j))
{
index=i;
i++,j++;
while((data+j)!='\0')
{
if((str+i)==(data+j))
i++,j++;
else
break;
}
if((data+j)=='\0')
{
printf("%d ",index);
flag=1;
}
else
i=index+1;
}
else
{
i++;
}
j=0;
}
if(flag==0)
printf("No find!\n");
else
printf("\n");
}
int main()
{
char str ="This is a test of c program!";
char data[80];
scanf("%s",data);
while(strcmp("###",data)!=0)
{
find(str,data);
scanf("%s",data);
}
return 0;
}
运行效果如下:
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项。
C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度。
在程序里,一般会用strlen()函数或sizeof来获取一个字符串的长度,但这2种方法获取的字符串的长度其实是不一样,我们用如下函数进行测试:
void test6()
{
char s1[20] = "hello world";
char s2[20] = {'h','e','l','l','0',' ','w','o','r','l','d','\0'};
char s3[] = "hello\0 world";
char s4[] = {'h','e','l','l','0','\0',' ','w','o','r','l','d','\0'};
printf("%d\t%d\t%d\t%d\n",strlen(s1),strlen(s2),strlen(s3),strlen(s4));
printf("%d\t%d\t%d\t%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4));
}
注意,该函数里面定义了4个字符串,基本数据都是“hello world",但需要注意的是,字符串s1和s2给定了字符串数组的大小为20,然后使用2种方式进行赋值;字符串s3和s4是s1和s2对比的字符串,区别就是s3和s4字符串中间插入了一个'\0'。该函数运行的结果如下:
从运行结果可以看出,strlen()函数和sizeof求字符串长度需要注意下面几点:
1 strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数(如果字符串中间有'\0',则结果不是整个字符串的长度),同时不包括该'\0'
2 sizeof求得的结果是存储该字符串的变量占用的空间大小,因而一定会包括'\0'若'\0'后还有空余的空间,也会包含到结果里面
解释(与2种求值方式的实现原理有关):
1 strlen()的一种实现就是遍历字符串,遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数
2 sizeof 常用来求变量占用内存空间的大小,因而它返回的是存储字符串的变量所占用的内存空间大小,用来求字符串的长度,只在特定情况下可行,即字符数组刚好被一个字符串占满。
谢谢采纳。
以上就是关于编写程序,输入20个整数,将它们转换成字符串全部的内容,包括:编写程序,输入20个整数,将它们转换成字符串、要用C写一个比较字符串的程序,百试而败也,求助、c语言程序设计,有关字符串的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)