c++输入一串字符串,统计其中字母非字母的数目。
时间: 2024-05-07 10:21:09 浏览: 17
好的,下面是代码实现:
```c
#include <stdio.h>
int main() {
char str[100];
int i, alpha_count = 0, non_alpha_count = 0;
printf("请输入字符串:");
fgets(str, 100, stdin);
for (i = 0; str[i] != '\0'; i++) {
if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) {
alpha_count++;
} else {
non_alpha_count++;
}
}
printf("字母个数:%d\n非字母个数:%d\n", alpha_count, non_alpha_count);
return 0;
}
```
以上代码通过循环遍历字符串中的每个字符,判断其是否为字母并进行统计,最终输出结果。
相关问题
(C++)现有一个字符串以字符 0 为结尾,其中包含一些空格和回车,现在希望 统计该字符串中空格与回车的数目,并将此字符串中的空格删除、将回车替换为空 格输出。字符串由大小字母、空格和回车组成。 输入样例: Ji suan ke iiiii Suan Tou j un0 输出样例: 9 2 Jisuanke iiiii SuanToujun
可以使用两个变量分别记录空格和回车的数量,然后遍历字符串,遇到空格或回车就增加对应的变量。同时,可以使用另外一个字符串来存放处理后的结果,遇到回车就替换为空格,遇到空格就跳过。最后输出统计结果和处理后的字符串即可。
代码实现如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str[100];
cout << "请输入字符串:";
cin.getline(str, 100);
int spaceCount = 0, enterCount = 0;
char result[100];
int len = strlen(str);
int j = 0;
for (int i = 0; i < len; i++) {
if (str[i] == ' ') {
spaceCount++;
continue;
}
if (str[i] == '\r') {
enterCount++;
result[j++] = ' ';
continue;
}
result[j++] = str[i];
}
result[j] = '\0';
cout << "空格数量:" << spaceCount << endl;
cout << "回车数量:" << enterCount << endl;
cout << "处理后的字符串:" << result << endl;
return 0;
}
```
注意,这里使用了 `cin.getline()` 函数来读取含有空格和回车的字符串,而不是 `cin`。因为 `cin` 遇到空格或回车就会停止读取,而 `getline()` 可以读取整行字符串。
用c++语言解决问题:输入一个字符串,输出N个字符串,用空格隔开,表示这个字符串里含有的词语
### 回答1:
您好,我可以回答这个问题。要解决这个问题,您可以使用字符串分割函数 strtok(),将输入的字符串按照空格分割成多个子字符串,然后逐个输出即可。以下是示例代码:
```
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin);
str[strlen(str)-1] = '\'; // 去掉末尾的换行符
char *token = strtok(str, " ");
while (token != NULL) {
printf("%s ", token);
token = strtok(NULL, " ");
}
return ;
}
```
这段代码中,我们使用 fgets() 函数从标准输入读入一个字符串,然后使用 strtok() 函数将其按照空格分割成多个子字符串。最后逐个输出这些子字符串,每个子字符串之间用空格隔开。
### 回答2:
要用C语言解决此问题,首先需要明确输入和输出的形式。
输入:
用户需要输入一个字符串。可以通过使用C语言中的scanf或者gets函数来接收用户输入。
处理:
接收到用户输入的字符串后,需要对其进行处理,将其中的词语提取出来。可以通过循环遍历字符串的每一个字符,逐个判断是否为字母或数字,来确定一个词语的起始位置和结束位置。当遇到非字母或非数字字符时,则表示一个词语结束。将每个词语提取出来,并且存储到一个数组中。
输出:
将提取出的词语依次输出,之间以空格隔开。可以通过使用循环遍历数组,并使用printf函数输出每个词语,然后在每次输出之后加上一个空格。
具体代码如下所示:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_SIZE 100
int main() {
char input[MAX_SIZE];
char words[MAX_SIZE][MAX_SIZE];
int wordCount = 0;
// 接收用户输入的字符串
printf("请输入一个字符串:");
gets(input);
// 提取词语
int len = strlen(input);
for (int i = 0; i < len; i++) {
if (isalnum(input[i])) {
int j = 0;
while (isalnum(input[i+j])) {
words[wordCount][j] = input[i+j];
j++;
}
words[wordCount][j] = '\0'; // 在词语末尾添加结束符
wordCount++;
i += j;
}
}
// 输出词语
printf("提取出的词语为:");
for (int i = 0; i < wordCount; i++) {
printf("%s ", words[i]);
}
return 0;
}
```
这段代码可以实现接收一个用户输入的字符串,并将其中的词语提取出来并输出,其中词语之间以空格隔开。输出结果示例:
请输入一个字符串:Hello world! This is a test.
提取出的词语为:Hello world This is a test
这样就用C语言解决了输入一个字符串,输出N个字符串的问题。
### 回答3:
要用C语言解决这个问题,可以使用字符串处理函数和循环结构来实现。具体步骤如下:
1. 首先,声明一个字符串变量str,用于存储输入的字符串。
2. 使用scanf函数获取用户输入的字符串,并将其存储到str中。
3. 声明一个整型变量count,并初始化为0,用于计数。
4. 使用strtok函数将str按照空格来切割成多个子串。
5. 使用while循环遍历每个子串,直到子串为NULL为止。
6. 在while循环中,对于每个子串,将其输出,并在后面添加一个空格。
7. 每次输出一个子串后,将count加1。
8. 循环结束后,将count输出,即表示字符串中含有的词语数目。
下面是代码示例:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%[^\n]", str);
char* token = strtok(str, " ");
int count = 0;
while (token != NULL) {
printf("%s ", token);
count++;
token = strtok(NULL, " ");
}
printf("\n词语数目:%d\n", count);
return 0;
}
```
运行程序后,输入一个字符串,程序将会输出每个词语并用空格隔开,最后输出字符串中所含词语的数目。