字符赋值问题程序有误,请指出错误

描述

小洪想请你编写一个译码程序,把一条英文句子译成数字代码。译码规则是以数字1代替字母a,数字2代替字母b,…,26代替字母z,如遇空格则打印一个“#”,英文句子以“.”结束。

输入
一条以字符“.”结束的由小写字母、空格组成的英文句子。

输出
一行,译码以后的字符串。

我的错误程序如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
char a='1',z='26';

for(char i=a;i<=z;i++){
  cin>>i;
    if(i==' '){
        cout<<"#";
    }
  if(i=='.'){
  break;
  }
    cout<<i;    
}

return 0;

}

字符型变量,a~z对应的是ASCII码表里面的97~122


#include<bits/stdc++.h>
using namespace std;
int main(){
char a='a',z='z';

char i='a';

while((i>=a&&i<=z)||i=='.'||i==' '){
    i=getchar();
    if(i==' ')
    {
        cout<<"#";
    }
    else if(i=='.')
    {
    break;
    }
    else if(i!='\n')
    {
        int num=i-'a'+1;
        cout<<num;    
    }
}
 
return 0;
}

字符赋值有问题,数字赋值要用ASCII码赋值,可百度ASCII查看。记不住ASCII码可以使用char a=‘a’这种方法。
有多个字符输入可以使用getchar();进行对字符读取。然后减去‘a’的值+1.例:输入a,a-‘a’=0,a+1=1,输出1。
while判断是否是小写字母