C语言问题,关于字符串
发布网友
发布时间:2022-04-20 12:14
我来回答
共3个回答
热心网友
时间:2022-04-20 13:43
话不多说,以下两种,你任选一个。有注释:
一、
#include <stdio.h>
#include <string.h> //程序目的:使输入的字符串按反序存放
int main(){
void upsidedown(char str[]);
char str[100];
gets(str);
upsidedown(str);
printf("%s",str);
return 0;
}
void upsidedown(char str[])
{
int i,i2;
char str1[100];
for(i=0;i<strlen(str);i++) //你只遍历原字符串的一半,要全部遍历。
{
str1[i] = str[strlen(str)-1-i];
}
str1[strlen(str)] = 0; //字符串要以NULL(实质就是0,亦是'\0')结尾
strcpy(str,str1);
}
二、
#include <stdio.h>
#include <string.h> //程序目的:使输入的字符串按反序存放
int main(){
void upsidedown(char str[]);
char str[100];
gets(str);
upsidedown(str);
printf("%s",str);
return 0;
}
void upsidedown(char str[])
{
int i,i2;
char str1[100];
for(i=0;i<strlen(str)/2;i++) //如果只遍历一半,那么要进行如下两部操作
{
str1[i] = str[strlen(str)-1-i]; //str1的前半部分
str1[strlen(str)-1-i] = str[i]; //str1的后半部分
}
str1[strlen(str)] = 0; //字符串要以NULL(实质就是0,亦是'\0')结尾
strcpy(str,str1);
}
为什么会有乱码这个问题:
1、在你的函数upsidedown中,程序运行的时候会在函数栈上给str1分配sizeof(char)*100这么大的内存,而这些内存中存放的东西,系统会给他初始化赋值。赋的什么值,要根据不同的编译器来定了,debug模式下,赋值为ccccccc,cc恰巧为中文的烫,出现输出“烫”就是这个原因。其他地方可能会输出一些更奇怪的东西。这点也要求程序员要养成良好的习惯,在写代码时,不管是全局的还是局部的变量,定义好的时候就赋初始值。比如char str1[100] = {0};
热心网友
时间:2022-04-20 15:01
#include <stdio.h>
#include <string.h> //程序目的:使输入的字符串按反序存放
void upsidedown(char str[]);
int main()
{
char str[100];
gets(str);
upsidedown(str);
puts(str);
return 0;
}
void upsidedown(char str[])
{
int i;
char str1[100];
for(i=0;i<(strlen(str));i++)
{
str1[i]=str[strlen(str)-1-i];
}
str1[i]='\0';
strcpy(str,str1);
}
为什么有乱码呢,是因为str1的空间为100,你只给str1前N位赋值,后面大于N小于100的空间系统就随机给字符了,而且你的N肯定是小于100的,所以我加了这一句str1[i]='\0';是说明str1到第i位已经结束了,这样系统就不会随机给值了。
热心网友
时间:2022-04-20 16:36
一个循环就解决了,你怎么写了那么一堆。。。追问初学。请问为什么会有乱码出现
追答#include
#include
#define N 10 //可通过改变N 的值来改变输入字符串的长度
char a[30];
int i;
void main()
{
void Reverse(); //函数声明
printf("请输入字符串:");
scanf("%s",&a[i]);
printf("反转后的字符串:");
Reverse(); //函数调用
}
void Reverse() //函数定义
{
for(i=N;i>=0;i--)
printf("%c ",a[i]);
printf("\n");
}
Reverse是反转
你试试这个,我看不懂你写的那个,所以我也不知道为什么有乱码