4-字符数组的赋值

1
2
3
char*s1 = "Ctest"
char s2[]={'C''t''e''s''t'};
char s3[20]="Chest"

// 不可以
char s4[10];
s1=“chest”;

C语音中不能将字符串常量直接赋给数组。但在赋初值时可以。

// 通过终端读入字符串, 由于可能输入的字符串包含空格, 需要使用 getline 函数

1
2
3
const int N = 100;
char str[N];
cin.getline(str, N);

增强函数 #include <iostream>

习题

题目内容:
编写函数去除字符串中包含的非字母字符(不包括空格),并将小写字母转换成大写字母。
注意,不在函数中输出。输入输出应在主函数中进行。

输入格式:
待转换的字符串,字符串间会包含空格,长度不超过200。

输出格式:
转换后的字符串

注意:本题应使用字符数组实现,不能使用字符串处理库函数,不能使用string类。

输入样例:
happy new year!

输出样例:
HAPPY NEW YEAR


#include
#include

using namespace std;

char toUpperCase(char c)
{
if (c >= ‘a’ && c <= ‘z’)
{
c = c - ‘a’ + ‘A’;
}
return c;
}

int main()
{
const int N = 201;
char array[N];
cin.getline(array, N);

int i;
int j = 0;
int len = strlen(array);

char str[N] = "";
for (i = 0; i < len; i++)
{
    if ((array[i] >= 'a' && array[i] <= 'z') || (array[i] >= 'A' && array[i] <= 'Z'))
    {
        str[j] = toUpperCase(array[i]);
        j++;
    }
    else if (array[i] == ' ')
    {
        str[j] = array[i];
        j++;
    }
}

cout << str << endl;

for (int i = 0; i < N; i++)
{
    cout << i << str[i] << endl;
}

return 0;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

```c
题目内容:
编写函数计算一个英文字符串中的单词个数。

输入格式:
一个最长500个字母的英文字符串,不包含数字和特殊字符,但可能包含一些英文标点符号(逗号、句点、问号)。标点符号独立出现时不视为一个单词。 单词间可能包含一个或多个空格。

输出格式:
该句子的单词个数

注意:本题应使用字符数组实现,不能使用字符串处理库函数,不能使用string类。

输入样例:
We hope everyone watches them with warmth.

输出样例:
7

根据英语的书写习惯,在每个单词前后都会有空格分隔。 所以可以依据空格来划分单词。
不过,由于空格可能存在连续多个,所以仅统计空格数是不可以的,需要更复杂一些的算法。

算法设计:
核心思想是通过一个flag,来确定单词的起始, 每出现一个单词的起始,则表示存在一个单词。 这样统计出现的单词起始个数,即可获得单词总数。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

#include <iostream>
#include <cstring>

using namespace std;

bool isAlpha(char c)
{
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}

int main()
{
const int N = 501;
char str[N];
cin.getline(str, N);

bool flag = false;
int count = 0;

int n = strlen(str);
for (int i = 0; i <= n; i++)
{
if (flag)
{
if (!isAlpha(str[i])) {
count++;
flag = false;
}
}
else
{
// 上一位是字母, 此处位非字母
if (isAlpha(str[i]))
{
flag = true;
}
}
}
cout << count << endl;
return 0;
}