一道C语言题:整理字符串,将字符串中前导和后随的空白符删除,字符串中间连续的多个空白符只保留一个,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道C语言题:整理字符串,将字符串中前导和后随的空白符删除,字符串中间连续的多个空白符只保留一个,相关的知识,希望对你有一定的参考价值。
一道C语言题:(用指针不用函数,在主函数内完成)整理字符串,将字符串中前导和后随的空白符删除,字符串中间连续的多个空白符只保留一个,去掉多余的空白符。
我的代码是这样写的:
#include<stdio.h>
int main()
char s[250],*p=s,*q=s;
printf("Enter a string!\n");
gets(s);
while(*p=' ')
p++;
while(*p)
if(*p=' ')
*q++=*p++;
for(;*p=' '&&*p;p++);
else
*q++=*p++;
*q='\0';
printf("%s\n",s);
return 0;
求高手解答,错在哪里?感激不尽!急啊~~~
char str1[20],str2[20]
int i,j;
scanf("%s",str1);
for(i=0,j=0;i<=19;i++,j++)
if(str[i]!==' ') str2[j]==str1[i];
if(str[i]==' ') j--;
printf("%s",str2);
或:
#include<stdio.h>
void trim_sp(char *str)
int len,i,j;
len = strlen(str);
while (str[len-1] == ' ') len--;
str[len] = '\\0';
i=0;
while (str[i] == ' ') i++;
for(j=0;j<=len-i;j++) str[j]=str[j+i];
void main ()
char str[] = " abcd kkk hhh jjjj ";
trim_sp(str);
printf("|%s|\\n",str);
扩展资料:
字符串在存储上类似字符数组,它每一位单个元素都是能提取的,字符串的零位是它的长度,如s[0]=10,这提供给我们很多方便,例如高精度运算时每一位都能转化为数字存入数组。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
参考资料来源:百度百科-字符串
参考技术A 我想问一下*p和*q表示什么呀 参考技术B 代码写得很漂亮,怎么就犯了低级错误呢,,==写成了=,不止一处哦~追问真的是太感谢了!!!再多问一句,怎么把后随的空白符删除呢?我上面这段代码里没有写到………
追答我正想告诉你,你的这个程序后随的空白符没删干净,还留了一个
追问可否来一句判断
正有此意,不过这样两句是不是就可以了
if(*(q-1)==' ')*(q-1)='\\0';
前面那句*q=‘\\0’;可以不用了吧
追问太完美了!真的很感谢!
追答不好意思,还是应该加上*q==’\0‘;这一句
本回答被提问者采纳C语言的一道题,急求解。
输入一个字符串,内有数字和非数字字符,如:
a23xia56 17960? 302tab5876
将其中连续的数字作为一个整数,一次存放到一数组a中。例如 123 存在a【0】,456 存在a【1】中,统计共有多少个整数,并输出这些数。
下面是我的程序,最好能告诉我哪里有问题、谢谢
1 #include <stdio.h>
2 #include <string.h>
3
4 int main(void)
5
6 int k=0,i, j;
7 char a[100],b[100][100];
8
9 for(k=0;a[k]!= '\n';k++)
10 scanf("%c",&a[k]);
11
12 while(a[k] != '\n')
13
14 if(a[k]<='9' && a[k]>= '0')
15
16
17 j=0;
18 b[i][j] = a[k];
19 while(a[++k] <= '9' &&a[++k]>='0')
20 b[i][++j]=a[k];
21 i++;
22
23
24 printf("The number of continious integer is %i",i);
25
26 i=0;
27 j=0;
28 printf("The integers are like follows: \n");
29 /*
30 while(b[i][j] != '\0')
31
32 char *ptr;
33 ptr= b[i];
34 n[i]=atoi(ptr);
35 printf("%i ", n[i]);
36 i++;
37
38 */
39 return 0;
40
万分感谢
对了,问题要求用指针来做。
需要修改的地方也很多,可能思路也很难用你程序里的
我做了一个,你可以参考一下我的,或许你也能改动些变成你的
我在程序如下:
#include "stdio.h"
#include <string.h>
int main()
int k=0,i, j;
char a[100];
int flag = 1;//用来设置输入回车符号的标志
for(k=0;flag!= 0;k++)//flag为0时停止循环
scanf("%c",&a[k]);
if (a[k] == 10)//如果有回车符号输入,flag的值变为0
flag =0;
k = 0;//k值要再次赋0值
long arr[100];//用来保存整数的数组
long sum = 0;//计算中间的整数
int num =0;//计算整数个数
j = 0;//数组下标
while(a[k] != 10)//判断是否为回车符号,
if (a[k]<='9' && a[k]>= '0')//如果是数字进入该循环体
num++;
sum = 0;
int i = 0;
while(a[k]<='9' && a[k]>= '0')//如果是数字进入该循环体
if (i == 0)//第一个数字
sum = (int)(a[k]-48);//将字符转换为数字
else//非第一个数字
sum =10*sum + (int)(a[k]-48);//将字符转换为数字
i++;
k++;
arr[j++] = sum;//将计算的数字存到数组中
k--;
k++;
printf("The number of continious integer is %i\n",num);
printf("The integers are like follows: \n");
i = 0;
while (--j >=0)
printf("%ld\n",arr[i++]);
return 0;
运行效果如下:
54sdf ?02395 sdfk pp 888
The number of continious integer is 3
The integers are like follows:
54
2395
888
请按任意键继续. . . 参考技术A 用atoi函数可能简单点 参考技术B 12 while(a[k] != '\n') //这里k 没初始化。。
13
14 if(a[k]<='9' && a[k]>= '0')
15
16
17 j=0;
18 b[i][j] = a[k]; //i 没有初值 ,k也没有 。。
19 while(a[++k] <= '9' &&a[++k]>='0')
20 b[i][++j]=a[k];
21 i++;
22
23
24 printf("The number of continious integer is %i",i); //%i 什么格式? 改%d 或%ld 参考技术C #include <stdio.h>
#define MAX 20
void main()
int k=-1,i=-1,j,t;
char a[MAX],b[MAX][MAX];
do
k++;
scanf("%c",&a[k]);
while(a[k]!='\n');
k=0;
while(a[k]!='\n')
if((a[k]<='9')&&(a[k]>='0'))
i++;j=0;
b[i][j] = a[k];
k++;
while((a[k]<='9')&&(a[k]>='0'))
j++;
b[i][j]=a[k];
k++;
j++;b[i][j]='\n';
if(a[k]=='\n') k--;
k++;
printf("The number of continious integer is %d\n",i+1);
printf("The integers are like follows: \n");
t=i;
for(i=0;i<=t;i++)
j=0;
while(b[i][j]!='\n')
printf("%c",b[i][j]);
j++;
printf("\n");
运行效果如下:
12df 7da798 7~@#5t
The number of continious integer is 3
The integers are like follows:
12
7
98
7
5 参考技术D 换个思路把,看我的:
#include <stdio.h>
#include <ctype.h>
int main(void)
int ch, num = 0, flag = 0, count = 0;
while(ch = getchar())
if(!isdigit(ch) && flag)
printf("%d ", num);
count++;
num = flag = 0;
if(isdigit(ch))
num = 10 * num + ch - '0';
flag = 1;
continue;
if(ch == '\n')break;
printf("\ncount = %d\n", count);
return 0;
以上是关于一道C语言题:整理字符串,将字符串中前导和后随的空白符删除,字符串中间连续的多个空白符只保留一个,的主要内容,如果未能解决你的问题,请参考以下文章
c语言编程 删除任意字符串中前导*号中间和后面的*号保留 请写出完整程序