c语言统计一行字符串中有多少个空格符号
时间: 2024-12-25 18:31:05 浏览: 18
在 C 语言中,你可以通过遍历字符串并计数遇到的空格字符(ASCII 码值为 32)来统计一个字符串中空格的数量。下面是一个简单的函数示例:
```c
#include <stdio.h>
#include <string.h>
int count_spaces(char *str) {
int space_count = 0;
while (*str != '\0') { // 遍历直到字符串结束
if (*str == ' ') { // 如果当前字符是空格
space_count++; // 计数加一
}
str++; // 移动指针到下一个字符
}
return space_count; // 返回空格的总数
}
int main() {
char str[] = "这是一个包含多个空格的字符串";
int spaces = count_spaces(str);
printf("字符串 '%s' 中有 %d 个空格。\n", str, spaces);
return 0;
}
```
在这个例子中,`count_spaces` 函数接收一个字符串 `str` 参数,然后返回该字符串中空格的数目。注意,这个函数会忽略字符串结尾的空格。
相关问题
c语言输入一个字符串,统计字符串中非英文字母的字符个数并输出
好的,以下是实现该功能的C语言代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int count = 0;
printf("请输入一段字符串:");
fgets(str, sizeof(str), stdin); // 读取整行字符串
str[strlen(str)-1] = '\0'; // 去掉末尾的换行符
for (int i = 0; str[i]; i++) {
if ((str[i] < 'A' || str[i] > 'Z') && (str[i] < 'a' || str[i] > 'z')) {
count++;
}
}
printf("非英文字母的字符个数为:%d\n", count);
return 0;
}
```
这段代码通过fgets函数读取用户输入的一行字符串,然后遍历字符串中的每个字符,判断是否为英文字母。如果不是,则累加非英文字母的字符个数,最后输出总数。请注意,代码中使用了字符的ASCII码值进行比较,因此不仅包括了常见的标点符号,还包括了空格、数字等非英文字母的字符。
c语言给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。输出时去掉多余的空格。只在每个单词之间以1个空格间隔。输出的每行末尾没有空格。 输入格式: 输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。 输出格式: 输出包括多行,每行对应输入的一行,为翻转后的字符串。输出时去掉多余的空格。只在每个单词之前以1个空格间隔。输出的每行末尾没有空格
这道题可以先将整个字符串翻转,然后再单独翻转每个单词即可。具体实现可以使用双指针,一个指针指向单词的起始位置,另一个指针向后遍历直到遇到空格或者字符串末尾,然后将这个单词翻转即可。最后再去掉多余的空格输出即可。
下面是具体的 C 语言实现:
```c
#include <stdio.h>
#include <string.h>
void reverse(char *s, int start, int end) {
while (start < end) {
char t = s[start];
s[start] = s[end];
s[end] = t;
start++;
end--;
}
}
void reverseWords(char *s) {
int len = strlen(s);
// 先翻转整个字符串
reverse(s, 0, len - 1);
int i = 0, j = 0;
while (i < len && j < len) {
// 找到一个单词的起始位置
while (i < len && s[i] == ' ') i++;
// 找到这个单词的结束位置
j = i;
while (j < len && s[j] != ' ') j++;
// 翻转这个单词
reverse(s, i, j - 1);
// 处理多余的空格
while (j < len && s[j] == ' ') j++;
// 移动 i 指针到下一个单词的起始位置
i = j;
}
// 去掉多余的空格
i = 0, j = 0;
while (j < len) {
while (j < len && s[j] == ' ') j++;
while (j < len && s[j] != ' ') s[i++] = s[j++];
while (j < len && s[j] == ' ') j++;
if (j < len) s[i++] = ' ';
}
// 去掉末尾空格
while (i > 0 && s[i - 1] == ' ') i--;
s[i] = '\0';
}
int main() {
char s[50010];
while (fgets(s, 50010, stdin) != NULL) {
reverseWords(s);
printf("%s", s);
}
return 0;
}
```
时间复杂度为 $O(n)$,其中 $n$ 是字符串的长度。
阅读全文