编写程序,输入20个整数,将它们转换成字符串

编写程序,输入20个整数,将它们转换成字符串,第1张

此程序可通过以下步骤实现:

1、输入一个正整数

2、将整数转换为字符串(使用sprintf函数

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语言程序设计,有关字符串的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9277695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存