C语言用如何用scanf输入带有空格的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言用如何用scanf输入带有空格的字符串相关的知识,希望对你有一定的参考价值。
如题
要输入带空格的字符串,要用到一个格式字符:%[] --> 一个字符集。
“%[]”的作用是扫描字符集合:
例如:scanf(“%[^\\n]”,str);
具体作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果一经发现不属于就结束提取。该方法会自动加上一个'\\0'到已经提取的字符后面。
#include <stdio.h>
int main()
char str[81];
printf("Please input a string:\\n");
scanf("%[^\\n]",&str);
printf("The string is:\\n%s\\n",str);
return 0;
扩展资料:
字符串函数应用:
1. 连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn。
例:concat(‘11’,'aa’)='11aa’。
2. 求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。
例:copy(‘abdag’,2,3)=’bda’。
3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。
例:s:=’abcde’;delete(s,2,3);结果s:=’ae’。
4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置。
例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’。
5. 求字符串长度 length(s) 例:length(‘12abc’)=5。
在ASP中 求字符串长度用 len(s)例: len("abc12")=5。
参考资料:
百度百科-扫描集
参考技术AC语言中scanf()函数提供的“%[]”格式串可以用来进行多个字符的输入,并对结束符进行自定义。 对于%[]还可以用^+任意字符(包括 eof)来结束字符串的输入,如%[^EOF]就是直到有EOF 输入,字符串才中止。
参考代码:
void main()
char str[100];
scanf("%[^\\n]",str);//直到输入回车键,读取才结束,当然不能超过a定义的大小,否则会出错。此命令与gets(str)效果一样。
printf("%s\\n",str);
参考技术B 你可以采用gets();函数输入,空格也算在内的。输入对应的是puts();要使用这个函数头文件里面只需添加#include <string.h>.如果对你有用,望采纳。 参考技术C 这样就可以了
char buf[256];
char ch;
for( int i = 0; i < sizeof(buf) && (ch = getchar()) != '\n'; i++ )
buf[i] = ch;
buf[i] = '\0'; 参考技术D 你就用gets(字符串数组名),别忘了#include <string.h>
C语言:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
#include<bits/stdc++.h>
usingnamespacestd;
intmain()
chara;ints=1;
scanf("%c",&a);
while(a!='.')
if(a==''||a==',')s++;
scanf("%c",&a);
cout<<s;
return0;
扩展资料
C语言统计文件中的字符数、单词数注意事项
1、空白字符(空格和tab缩进)不计入字符总数;
2、单词以空格为分隔;
3、不考虑一个单词在两行的情况;
4、限制每行的字符数不能超过1000。
5、每次从文件中读取一行,放到缓冲区buffer,然后遍历缓冲区,统计当前行的字符和单词数。fgets()函数用于从文件中读取一行或指定个数的字符。
参考技术A #include"stdio.h"
main()
char
string[81];
/*定义一个字符型数组*/
int
i,num=0,word=0;
/*定义几个整型常量,i用来控制循环次数,num表示单词个数,word相当于一个标志*/
char
c;
/*定义一个字符型变量*/
gets(string);
/*获取用户输入的一句话,在这句话的末尾系统会自动添加一个结束标志'\0'*/
for
(i=0;(c=string
[i]
)!='\0';i++)
/*从string[0]开始判断,只要它不是结束标志,就执行下面的语句*/
if(c=='
')
/*判断当前字符是不是空格,比如I
am
a
boy,第一个I不是空格,所以
就不执行word=0,而执行下一句
判断word是不是等于0(word=0表示把0赋给word,word==0表示判断word等不等于0),显然是的,因为
开始时赋给word的值是0,所以执行语句:“把1赋给word;num++”,此时num为1。再判断第二个,是空格,
所以再把0赋给word。再判断第三个a,不是空格,所以执行else
if(word==0),因为刚才把0赋给word了,
所以执行“把1赋给word;num++”,此时num为2,再判断第四个m,不是空格,但此时word为1,所以
else
if(word==0)语句不再执行,可以看出word的目的就是防止num重复相加,此后以此类推*/
word=0;
else
if(word==0)
word=1;
num++;
printf("There
are
%d
words
in
the
line.
\n"
,
num);
不知道我有没有说清楚,我自己看程序的时候就是这样自己按程序走几次,一般都能懂,希望对你有帮助··· 参考技术B 提供一个思路。
首先你需要判断什么样的情况属于单词。
1.两个空格之间的不间断的字母可以看做一个单词。
2.这个字母可以任意长。(只要比句子短就可以)
如果想省事的话,可以设置3个指针:
phead pword
首先这2个指针都指向句子的首部。
1.遇到第一个空格,且空格后为字母,phead停住,指向这个空格。然后pword继续走。
2.如果pword一直都是遇到字母,则当它的下一个字符为空格或者结束符时,单词数目加1.同时,phead等于pword,继续寻找下边的字符串。
这样一直循环到字符串结束。 参考技术C #include<conio.h>
#include<stdio.h>
void despace(char *s,int *i)
while(s[*i]==' ') (*i)++;
int main()
int count=0,i=0;
char s[50];
char c;
gets(s);
while((c=s[i])!='\0')
if(c==' ')
despace(s,&i);
count++;
i++;
count++;
printf("\ncount:%d",count);
getch();
return 1;
本回答被提问者采纳 参考技术D #include "stdio.h"
main()
int i,sum=0,s=0;
char str[100];
printf("请输入一些字符,之间用空格隔开,然后按回车键:\n");
gets(str);
for(i=0;str[i];i++)
if(str[i]==' ')
if(s) sum++;
s=0;
else s=1;
printf("共有单词 : %d 个 \n",sum);
以上是关于C语言用如何用scanf输入带有空格的字符串的主要内容,如果未能解决你的问题,请参考以下文章