题目:以“#”为结尾输入字符串,在字符串中的所有小写字母字符后面添加$字符
```c
#include<stdio.h>
int main()
{
int i=0,flag=0,k=0;
char a[80],b[80];
while(a[k]=getchar()!='#'){
k++;
}
a[k]='\0';
int j=0;
for(i=0;a[i]!='0';i++){
if(a[i]>='a'&&a[i]<='z'){
flag=1;
b[j]=a[i];
j++;
b[j]='$';
j++;
}
else{
b[i]=b[j];
j++;
}
}
b[j]='\0';
if(flag==0){
printf("NO FOUND");
}
else
for(i=0;b[i]='\0';i++){
printf("%c",b[j]);
}
}
```
大哥,你要注意,字符串终结,这样写代码时要用a[i] !='\0';
除此之外,你的代码有一些不细心的错误(太多),能明显看出你并没有理解逻辑。
你可以去学习回顾一下c语言字符串的表示及初始化,以及对字符串进行打印的方式。
数组存储字符串时,一定要注意终结默认是'\0',并且,遍历的时候,理解逻辑再写代码,多调试和日志分析代码,一定不要越界(就是代码没结果或者看不懂问题的原因)
#include<stdio.h>
int main()
{
int i = 0, flag = 0, k = 0;
char a[80] = { 0 }, b[80] = {0};
while ((a[k] = getchar()) != '#') {
k++;
}
a[k] = '\0';
int j = 0;
for (i = 0; a[i] != '\0'; i++) { //字符串的终结符是 \0
if (a[i] >= 'a' && a[i] <= 'z') {
flag = 1;
b[j] = a[i];
j++;
b[j] = '$';
j++;
}
else {
b[j] = a[i];//有错误
j++;
}
}
b[j] = '\0';
printf("b is [%s] \n", b);
if (flag == 0) {
printf("NO FOUND");
}
else {
for (i = 0; b[i] != '\0'; i++) {
printf(" %c ", b[i]); //有错误
}
}
}
#include<stdio.h>
int main()
{
int i=0,flag=0,k=0;
char a[80],b[80];
while((a[k]=getchar())!='#'){
if(a[k]>='a'&&a[k]<='z'){
flag=1;
a[++k]='$';
}
k++;
}
a[k]='\0';//'#'放不放在数组内,如果放在数组内,则改为a[++k]='\0';
if(flag==0){
printf("NO FOUND");
}
else
for(i=0;i<k;i++){
printf("%c",a[i]);
}
return 0;
}
用C++改的,跟c区别不大,基础问题较多,代码里面说了
#include<iostream>
using namespace std;
#include<stdio.h>
int main()
{
int i = 0, flag = 0, k = 0;
char a[80], b[80];
while (1) {//输入这用getchar有问题,最好这样用
cin >>a[k];
k++;
if (a[k-1] == '#')
break;
}
a[k] = '\0';
int j = 0;
for (i = 0; a[i] != '\0'; i++)
{
if (a[i] >= 'a'&&a[i] <= 'z') {
flag = 1;
b[j] = a[i];
j++;
b[j] = '$';
j++;
}
else {
b[j] = a[i];//这你原来写的啥忘了,反正这也写错了
j++;
}
}
b[j] = '\0';
if (flag == 0) {
printf("NOT FOUND");//英语问题,not found
}
else
for (i = 0; b[i] != '\0'; i++) {
printf("%c", b[i]);//写成b[j]了
}
}