#include<iostream>
using namespace std;
void myfunc(char str[],int& letterCount, int& digitCount, int& othersCount)
{
int index = 0;
while (str[index])
{
cout << str[index] << endl;
if (str[index] >='0'&& str[index] <= '9') digitCount++;
else if (str[index]>='A' && str[index] <= 'z') letterCount++;
else othersCount++;
index++;
}
}
int main()
{
cout << "Input a string" << endl;
char string[80];
cin.getline(string,80);//从输入流中读取80个数字,存到字符数组中,这个是不是1就不会有“\0”了呢?
int letterCount = 0;
int digitCount = 0;
int othersCount=0;
myfunc(string, letterCount, digitCount, othersCount);
cout << "letterCount=" << letterCount << endl;
cout << "digitCount=" << digitCount << endl;
cout << "othersCount=" << othersCount << endl;
}
#include <iostream>;
using namespace std;
void f(int arr[],int exist[],char s1[], char s2[])//s1出现了哪些字母?s1、s2同时出现的字母有哪些?(不区分大小写)
{
for (int i = 0;i < 26;i++)
{
arr[i] = 0;
}
for (int i = 0;i < 26;i++)
{
exist[i] = 0;
}
for(int i=0;s1[i] != NULL;i++)//如何记录是否已经储存了呢?
{
if ('a' <= s1[i] && s1[i] <= 'z') arr[s1[i] - 'a']=1;
else if ('A' <= s1[i] && s1[i] <= 'Z') arr[s1[i] - 'A']=1;
}
for(int i=0;s2[i]!=NULL;i++)
{
if ('a' <= s2[i] && s2[i] <= 'z' && arr[s2[i] - 'a'] == 1) exist[s2[i] - 'a'] = 1;
else if('A' <= s2[i] && s2[i] <= 'Z' && arr[s2[i] - 'A'] == 1) exist[s2[i] - 'A'] = 1;
}
}
int main()
{
char s1[80];
char s2[80];
cout << "Input 2 strings" << endl;
cin.getline(s1, 80);//getline允许有空格,空格会录进去,回车键是结束键
cin.getline(s2, 80);
int arr[26];
int exist[26];
for (int i = 0;i < 26;i++)
{
arr[i] = 0;
}
for (int i = 0;i < 26;i++)
{
exist[i] = 0;
}
f(arr, exist, s1, s2);
cout << "The letters in s1:" << endl;
for (int i = 0;i < 26;i++)
{
if (arr[i] == 1) cout <<char('a' + i) << " ";
}
cout << endl;
cout << "The letters int s1 and s2:" << endl;
for (int i = 0;i < 26;i++)
{
if (exist[i] == 1)cout <<char( 'a' + i) << " ";
}
}
瞎猫碰上死耗子,加个char()就能输出数字对应的字符了.根据给定的unicode编码或者ascii码取得其对应的字符(一般来说,英文字符及其扩展字符都是ascii字符,中文、日文、韩文等亚洲字符都是unicode字符,ascii字符为8位,unicode字符为16位(其中有3位用于标志字符类型))
#include<iostream>
using namespace std;
unsigned long AscToLong(char a[])//将数字字符串转化为一个unsigned long类型的整数并返回,还要求检验数字字符串的合法性
{
unsigned long num = 0;
int weight = 1;
int length = 0;
for (int i = 0;a[i];i++)
{
length++;
if (a[i] > '9' || a[i] < '0')
{
cout << "您输入的字符串不合法";
return NULL;
}
}
for (int i = length - 1;i >= 0;i--)
{
num += ((a[i]-'0') * weight);
weight *=10;
}
return num;
}
int main()
{
char string[80];
cout << "Input a ASCerⅡ-positive-unsigned long-integer:" << endl;
cin.getline(string, 80);
cout << " \" " << string << "(ASCⅡ)=" << AscToLong(string) << "(unsigned long)" << endl;
}
字符数组转成整数,我当时一个是忘了减'0',一个是注意一下可以用weight来做。。(但是我之前一直都是从低位往高位一直×10做的)
#include<iostream>
using namespace std;
void Chg10Tox(int n, int x)//将十进制数n转化为x进制。方法:每次除以x取模,直到商为0,然后最下方的模是最高位
{
int arr[100];
int i = 0;
int num = n;
while (num / x != 0)
{
i++;
arr[i - 1] = num % x;
num = num / x;
}
i++;
arr[i - 1] = num % x;
cout << i << endl;
cout << n << "(10)=";
for (int j = i - 1;j >= 0;j--)
{
cout << arr[j];
}
cout << "(" << x << ")" << endl;
}
int main()
{
int n;
cin >> n;
Chg10Tox(n, 2);
Chg10Tox(n, 4);
Chg10Tox(n, 5);
}
#include<iostream>
using namespace std;
void ChgxTo10(char a[], int x)//将x进制正整数转化为十进制数并输出
{
int i=0;//c++对于存放字符串的数组提供了strlen函数,但是咱们这个也不是字符串数组
while (a[i])i++;
int weight = 1;
int num = 0;
for (int j = i - 1;j >= 0;j--)
{
num += ((a[j]-'0') * weight);//总是忘了减一下字符0!!
weight *= x;
}
cout << num;
}
int main()
{
char arr[100];
cin.getline(arr, 80);
ChgxTo10(arr, 2);
}
总结:以后遇到这种题目,就想两件事。
1.数组下标弄的对不对
2.字符型数据有没有减‘0’