『采坑记录』从键盘上读取一个字符串

本篇博客介绍一下,从键盘上输入一个字符串引发的问题。

读取一行以空格分隔的字符串


C语言


首先,我们先来看一个代码

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main() {
	char str[1024];

	scanf("%s", str);
	printf("str: %s\n", str);

	system("pause");
	return 0;
}

在这里插入图片描述
可以看到空格后的字符串没有被读取到,这是因为%s就是遇到第一个空白字符停止的
在这里插入图片描述

如果我们想要读取一个带空格的字符串,该如何操作呢?下面看代码:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main() {
	char str[1024];

	scanf("%[^\n]", str);
	printf("str: %s\n", str);

	system("pause");
	return 0;
}

在这里插入图片描述
其中,%[^characters]表示遇到characters就停止读取
在这里插入图片描述

C++


我们先来看常用的cin

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main() {
	string str;

	cin >> str;
	cout << "str: " << str << endl;

	system("pause");
	return 0;
}

在这里插入图片描述
可以看到,cin和%s情况一样遇到第一个空白字符就会停止读取

我们可以使用string的成员函数getline来读取一个以'\n'结束的字符串:

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main() {
	string str;

	getline(cin, str);
	cout << "str: " << str << endl;

	system("pause");
	return 0;
}

在这里插入图片描述

我们来看下面一个问题

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main() {
	string str;

	cin >> str;
	cout << "str: " << str << endl;

	getline(cin, str);
	cout << "str: " << str << endl;

	system("pause");
	return 0;
}

在这里插入图片描述
为什么,getline什么都没有读到。这是因为,cin"hehe\n"放入输入缓冲区,而cin >> str;从其中将"hehe"取走,剩下一个"\n"就被getline函数刚好读走。
想要解决这个问题,我们可以每次输入一个字符串之后,都刷新一下输入缓冲区

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main() {
	string str;

	cin >> str;
	cout << "str: " << str << endl;

	fflush(stdin);

	getline(cin, str);
	cout << "str: " << str << endl;

	system("pause");
	return 0;
}

在这里插入图片描述

Java


同样的,我们先来看一段代码

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        String str = "";
        Scanner scanner = new Scanner(System.in);

        str = scanner.next();
        System.out.println("str: " + str);
    }
}

在这里插入图片描述

读取一个以回车结束的字符串方式如下

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        String str = "";
        Scanner scanner = new Scanner(System.in);

        str = scanner.nextLine();
        System.out.println("str: " + str);
    }
}

在这里插入图片描述

同样的,这里也存在和C++中一样的问题

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        String str = "";
        Scanner scanner = new Scanner(System.in);

        str = scanner.next();
        System.out.println("str: " + str);

        str = scanner.nextLine();
        System.out.println("str: " + str);
    }
}

在这里插入图片描述
解决方法是同样的,刷新输入缓冲区即可

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,这个问题可以回答。以下是程序的代码: #include <stdio.h> #include <ctype.h> int main() { char str[81]; int i, count = , word = ; printf("请输入一行字符:"); fgets(str, 81, stdin); for (i = ; str[i] != '\'; i++) { if (isalpha(str[i])) { if (!word) { word = 1; count++; } } else { word = ; } } printf("单词数为:%d\n", count); return ; } ### 回答2: 编写一个程序,从键盘读取一行字符,计数并显示单词数。首先,我们可以创建一个函数,该函数的参数为用户输入的一行字符,返回值为该行字符的单词数。 步骤如下: 1. 声明一个函数,命名为countWords,参数为字符串line。 2. 初始化变量wordsCount为0,用于记录单词数。 3. 使用split()方法将line字符串分割为多个子字符串,以空格作为分隔符,并将结果存储在一个列表中。 4. 使用for循环遍历列表中的每个子字符串。 5. 在for循环中,如果当前子字符串不为空字符串(即不只包含空格),则将wordsCount加1。 6. 循环结束后,返回wordsCount的值。 7. 在程序的主体部分,获取用户从键盘上输入的一行字符,并将其存储在变量inputStr中。 8. 调用countWords函数,传入inputStr作为参数,并将返回值存储在变量wordCount中。 9. 打印单词数,格式为"输入的句子中有 xx 个单词",其中xx为wordCount的值。 示例代码如下: ``` def countWords(line): wordsCount = 0 wordsList = line.split() for word in wordsList: if word != "": wordsCount += 1 return wordsCount inputStr = input("请输入一行字符(最多81个字符):") wordCount = countWords(inputStr) print("输入的句子中有", wordCount, "个单词。") ``` 这是一个简单的程序,用户可以通过键盘输入一行字符,然后程序会统计该行字符中的单词数,并将结果显示出来。程序基于一些基础的字符串处理方法实现。 ### 回答3: 编写一个程序来实现从键盘读取一行字符并计算单词数的功能。首先,我们需要定义一个变量来记录单词数,初始值为0。然后,使用输入函数读取一行字符,并将其存储在一个字符串变量中。接下来,我们需要对这个字符串进行处理。 从键盘读取的字符可能会包含空格、制表符和换行符等空白字符,因此我们需要使用split()函数来将字符串拆分成一个个单词。split()函数会根据空白字符将字符串拆分为多个子字符串,并返回一个包含这些子字符串的列表。我们可以使用len()函数来获取拆分后的列表长度,即单词数。 在计算单词数之前,我们还需要排除可能出现的一些特殊情况。例如,如果输入的字符串为空或者长度超过了81个字符,我们应该给出相应的提示错误信息。可以使用条件语句来判断并处理这些异常情况。如果输入字符串满足条件,则可以使用上述的方法计算单词数,并将结果显示在屏幕上。 最后,我们可以将上述程序封装成一个函数,方便以后的调用和复用。该函数的大致结构如下: def count_words(): word_count = 0 input_string = input("请从键盘上输入一行字符:") if input_string == "" or len(input_string) > 81: print("输入错误,请重新输入!") return words = input_string.split() word_count = len(words) print("单词数为:", word_count) count_words() 这样,我们就可以通过调用count_words()函数来运行整个程序,并从键盘读取一行字符并计数显示单词数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值